PHP OOP vs içerir

6 Cevap php

PHP uygulamaları geliştirirken nesneler (sınıflar) vs include dosyaları kullanarak artılarını ve eksilerini için bir başvuru istiyorum.

Ben bu cevap için gitmek için bir yer zorunda ... Ben kendi birkaç görüşler var yararlanacak biliyorum ama diğerleri haber bekliyoruz.

A Simple Example: Certain pages on my site are only accessible to logged in users. I have two options for implementation (there are others but let's limit it to these two)

  1. Bir authenticate.php dosyası oluşturun ve her sayfada yer alıyor. Bu kimlik doğrulaması için mantığı tutar.

  2. , Bir kimlik doğrulaması işlevi olan bir kullanıcı nesnesi oluşturun, her sayfada kimlik doğrulama için nesne başvurusu.

Edit I'd like to see some way weigh the benefits of one over the other. My current (and weak reasons) follow:

Includes - Sometimes a function is just easier/shorter/faster to call Objects - Grouping of functionality and properties leads for longer term maintenance.

Includes - Less code to write (no constructor, no class syntax) call me lazy but this is true. Objects - Force formality and a single approach to functions and creation.

Includes - Easier for a novice to deal with Objects - Harder for novices, but frowned upon by professionals.

I look at these factors at the start of a project to decide if I want to do includes or objects. Those are a few pros and cons off the top of my head.

6 Cevap

Bunlar gerçekten zıt seçenek değildir. Zaten kontrol kodu dahil olacak. Ben OO programlama vs prosedürel programlama gibi soruyu okuyun.

Kod birkaç satır ya da bir fonksiyon yazma, ve sayfa başlığında da dahil şeyler PHP3 veya PHP4 yapılmıştır nasıl oldu. O (biz osCommerce, örneğin, bir e-ticaret PHP uygulamalarında yaptım nasıl) çalıştığını, basit.

Birçok geliştirici onaylamak Ama o, korumak ve değiştirmek kolay değil.

PHP5'ta Eğer kendi verileri ve kimlik doğrulama yöntemleri taşıyacak bir kullanıcı nesnesi yazmak istiyorum. Sizin kod net ve her şey kullanıcıları ve kimlik doğrulama tek bir yerde konsantre olacaktır ile yapmak zorunda olduğu gibi korumak için daha kolay olacaktır.

Soru çok tartışmalı konularda (OOP, Kullanıcı kimlik) bir çift dokunur ederken ben bu ve autoload __ ile ilgili ikinci Konrad'ın Yorumlarınız tarafından atlarsınız. C / C + + bilen herkes dosyaları da dahil olmak üzere bir ağrı olabilir ne kadar bilir. Autoload ile OOP (ben neredeyse sadece yapmak) kullanmayı tercih ederseniz, bir PHP5 ek olarak, yalnızca adlandırma bazı standart dosya kullanmak gerekir ve dosya başına tek bir sınıf kısıtlayan ve PHP sizin için dinlenme yapacak (tavsiye ederim). Kodunu temizler ve artık kaldırmak için hatırlamak konusunda endişelenmenize gerek (ile birçok sorunlardan birini içerir) artık gerekli olduğunu içerir.

Benim mevcut iş istimal rağmen, çok PHP deneyimi yok. Genel olarak, ben daha büyük sistemler OO sağlar okunabilirliği ve anlaşılabilirliği yarar bulabilirsiniz. Ama tutarlılık (OO ve non-OO karışmaz) ve kişisel tercihleri ​​gibi şeyler (sadece gerçekten kişisel projeler üzerinde olsa) da önemlidir.

Can you be a bit more specific? For the example you give you need to use include in both ways. In case 1 you only include a file, in case 2 you need to include the class file (for instance user.class.php) to allow instantiation of the User class.

Bu OO olan, başvurunun kalan nasıl inşa edildiğini bağlıdır? Ö.Ö. kullanın.

Ben uygulamada kullandığım çekirdek kütüphane ve merkezi bir include bu kütüphanelerin (+ yapılandırma) iç dışında PHP include kullanmak için asla öğrendim. Her şey gerekli farklı sınıflar tanımak için yapılandırılabilir bir küresel __autoload işleyicisi tarafından işlenir. Bu sınıflar için uygun adlandırma kuralları kullanarak kolayca yapılabilir.

Bu esnek ama aynı zamanda oldukça etkili değil sadece ve temiz mimarisini tutar.

Sınıfların veya daha usul tarzında yapmak ister, sadece emin olmak için kontrol etmek gerekir:

  1. Bir oturum vardır;
  2. Oturum geçerli olduğunu; ve,
  3. Oturumun sahip kullanıcı uygun ayrıcalıklara sahip olduğunu.

Sen bir işlevi (veya işe yarayabilecek bir Oturum sınıfında statik bir yöntem) içine üç adım kozalayabilirsiniz. Bu deneyin:

class Session
{
  const GUEST = 0;
  const SUBSCRIBER = 1;
  const ADMINISTRATOR = 2;

  public static function Type()
  {
    session_start();

    // Depending on how you use sessions on
    // your site, you might just check for the
    // existence of PHPSESSID. If you track
    // every visitor with sessions, however, you
    // might want to assign some separate unique
    // number (that you can track in a DB) to
    // authenticated sessions
    if(!$_SESSION['uniqid'])
    {
      return Session::GUEST;
    }
    else
    {
      // For the best security, don't store the
      // user's access permissions in the $_SESSION,
      // but rather check against the DB. This will
      // ensure that recently deleted or downgraded
      // administrators will not be able to make use
      // of a previous session.

      return THE_ACCESS_LEVEL_ACCORDING_TO_THE_DB
    }
  } 
}


// In your files that need to check for authentication (you
// could also do this in a controller if you're going MVC

if(!(Session::Type() == Session::ADMINISTRATOR))
{
  // Redirect them to wherever you want them to go instead,
  // like a log in page or something like that.
}