PHP'nin __ özdevinimli_yükle fonksiyonu için yedek?

6 Cevap php

Ben böyle bir işlevi gerektiğinde dinamik sınıf dosyaları yükleme hakkında okudum:

function __autoload($className)
{
   include("classes/$className.class.php");
}

$obj = new DB();

Hangi o sınıfın yeni bir örneğini yaptığınızda otomatik olarak DB.class.php yüklemek, ama ben de sizin proje haline getirmek bir global fonksiyon ve kütüphaneler gibi bu kullanmak için kötü bir birkaç makale okuyacak bir __autoload() function karmaşası o kadar var.

Yani herkes bir çözüm biliyor mu? Ile aynı etkiyi elde etmek için belki de başka bir yol __autoload()? Ben uygun bir çözüm bulana kadar kitaplıkları ve getirmek kadar bir sorun haline başlamazsa ben sadece __autoload() kullanmaya devam edeceğiz.

Teşekkürler.

6 Cevap

Ben dahil etmek gerekir ki, bu mevcut değilse o düşer bir şekilde spl_autoload_register kullanın ve aynı zamanda __ autoload kullanmak kitaplıkları işlemek için aşağıdaki kodu kullanmış.

//check to see if there is an existing __autoload function from another library
if(!function_exists('__autoload')) {
    if(function_exists('spl_autoload_register')) {
        //we have SPL, so register the autoload function
        spl_autoload_register('my_autoload_function');      
    } else {
        //if there isn't, we don't need to worry about using the stack,
        //we can just register our own autoloader
        function __autoload($class_name) {
            my_autoload_function($class_name);
        }
    }

} else {
    //ok, so there is an existing __autoload function, we need to use a stack
    //if SPL is installed, we can use spl_autoload_register,
    //if there isn't, then we can't do anything about it, and
    //will have to die
    if(function_exists('spl_autoload_register')) {
        //we have SPL, so register both the
        //original __autoload from the external app,
        //because the original will get overwritten by the stack,
        //plus our own
        spl_autoload_register('__autoload');
        spl_autoload_register('my_autoload_function');      
    } else {
        exit;
    }

}

(Spl_autoload_register Normal __ özdevinimli_yükle davranışı devre dışı bırakmak çünkü) Yani, bu kodu varolan __ özdevinimli_yükle fonksiyonu için kontrol ve yığını eklemek yanı sıra kendi edecektir.

Sen yığına spl_autoload_register() , adding any existing __autoload() büyü kullanabilirsiniz.

function my_autoload( $class ) {    
    include( $class . '.al.php' );
}
spl_autoload_register('my_autoload');

if( function_exists('__autoload') ) {
    spl_autoload_register('__autoload');
}                                                                                         

$f = new Foo;

Doğru yolu bazı 3. parti siz de autoloader-yığın üzerinde bu işlevi koyabilirsiniz tanıttı spl_autoload_register . To save a __autoload fonksiyonunu kullanmak olacaktır:

if (function_exists('__autoload')) {
    spl_autoload_register('__autoload');
}

Spl_autoload_register yerine __ özdevinimli_yükle kullanın. Bu yığının içine özdevinimli_yükle fonksiyonu eklemek için izin verecektir.

Sen kullanabilirsiniz Zend_Loader. (... Zend Framework sizin için kullanılabilir varsayarsak)

Yapabileceğiniz en iyi siz programlama herhangi bir alt sistemi için autoloading için kendi object sorumlu tanımlamaktır.

Örneğin:

class BasketAutoloader
{
  static public function register()
  {
    spl_autoload_register(array(new self, 'autoload'));
  }

  public function autoload($class)
  {
    require dirname(__FILE__).'/'.$class.'.php';
  }
}