PHP autoloading prensibi nedir?

1 Cevap php

spl_autoload_register iş bu tür yapabilirim, ama ben bu tür bir iş nasıl yapılıyor anlamıyorum?

spl_autoload_register(array('Doctrine', 'autoload'));

1 Cevap

Olmayan bir tanımlı sınıfını kullanmak için çalışıyoruz ne zaman, PHP autoloader arayacak: Temel fikir artık include / require talimatları yazmak zorunda kalmamasıdır.

Robotuna iş, daha sonra, yüklenmiş olması gereken dosya belirlemek için, ve include o kadar sınıf tanımlı hale gelir.

Eğer aslında autoloading fonksiyonunda idam edilmiştir include talimat yazdı, biri sanki PHP, sonra bu sınıfı kullanabilirsiniz.


The "trick" is that the autoloading function :

  • sadece sınıfın adını alır
  • o sınıfı içeren dosyayı yani - yüklemek için hangi dosya belirlemek zorundadır.

Bu gibi gibi o sınıf Project_SubProject_Component_Name gibi Project/SubProject/Component/Name.php gibi dosyalar eşleştirilir diyor ARMUT biri olarak, adlandırma için nedeni - yani '{[(2)] } 'sınıf isimlerinde dosya sistemi üzerinde bölü (directories, subdirectories) ile değiştirir vardır.


For instance, if you take a look at the Doctrine_Core::autoload method, which is the one that will be called as an autoloader in your case, it contains this portion of code (after dealing with some specific cases) :

$class = self::getPath() 
            . DIRECTORY_SEPARATOR . 
            str_replace('_', DIRECTORY_SEPARATOR, $className) 
            . '.php';
if (file_exists($class)) {
    require $class;
    return true;
}
return false;

Hangi sınıf adı bulunuyor '_' / 'ile değiştirme ve dosya adı için bir nihai .php ekleyerek, dosya sistemi eşleştirilir demektir.

Eğer Doctrine_Query_Filter_Chain sınıfını kullanmak için çalışıyoruz, ve PHP tarafından bilinen değilse Örneğin, Doctrine_Core::autoload işlevi çağrılır; Bu yüklü olmalıdır dosya Doctrine/Query/Filter/Chain.php olduğunu belirlemek gerekir; o dosya var gibi ve bu dahil olacak - PHP şimdi Doctrine_Query_Filter_Chain sınıfı "bilir" demektir.