2011-11-20 13 views
30

co jest/są korzyści (y) mające wiele spl_autoload_registerstwardnienie spl_autoload_register

przykład:

spl_autoload_register('autoload_systems'); 
spl_autoload_register('autoload_thirdparties'); 
spl_autoload_register('autoload_services'); 

vs.

użyciu jednego

spl_autoload_register('autoload'); lub __autoload();

a następnie wykonaj logikę i z funkcją.

eg: 
$ftp = new systems_ftp(); 
$services = new services_cron_email(); 

Odpowiedz

21

Jeśli masz jedną __autoload() i dołączyć trzeci biblioteki strona, która również miała jedną, byłoby niszczona.

Rejestracja wielu automatycznych kodów pocztowych za pomocą spl_autoload_register() zapewnia możliwość wprowadzenia kodu za pomocą istniejącego kodu (pomyśl o bibliotekach itp.) Bez przeciągania lub pomniejszania istniejących/przyszłych autoload.

Ponadto PHP manual states ...

spl_autoload_register() zapewnia bardziej elastyczną alternatywę dla klas autoloading. Z tego powodu zniechęcanie do korzystania z usługi __autoload() jest odradzane i może zostać wycofane lub usunięte w przyszłości.

+0

ale mając wiele spl_autoload_register jest wolniejszy niż po prostu używać? –

+2

@GinoSullivan Być może, ale nie będę używał tego jako pretekstu do napisania kodu używającego '__autoload()'. – alex

+0

dzięki za informacje –

-1

Zgaduję, że nie trzeba dodawać wielu, ale jest to zgodne z Twoją logiką. sposób, w jaki działa spl_autoload_register, jest niesamowity. suppone ma się 3-cie stron i to jest zwykle zarządzane przez przestrzeń nazw, która również reprezentuje ich ścieżkę. rozważyć ten prosty klasy jako klasy automatycznego ładowania

klasy MyAutoLoader {

public function __construct() 
{ 
    spl_autoload_register(array($this, 'load')); 
} 




function load($class) 
{ 

    $filepath = 'classes/'.$class.'.php'; 
    require_once($filepath); 

} 

}

następnie w pliku indeksu zawierać plik ładującego i utworzyć egzemplarz tej klasy

$autoload = new MyAutoLoader(); 

teraz możesz bezpośrednio tworzyć ins z pytaniem klas załóżmy, że mamy klasę 'osoba' w katalogu 'klas \ SZJ \ Services \ Person.php', a sama ścieżka jest nazw tej klasy

$ osoba = new SZJ \ Services \ Person() ;

teraz, gdy użyjesz nowego, sprawdzisz, czy ta klasa istnieje, a wartość jako ciąg będzie przekazywana do funkcji 'load' klasy 'MyAutoLoader'. i tam to zostanie włączone. lub możesz zmienić funkcję "ładuj", aby naprawić ścieżkę plików klas ur umieszczonych w ur, jeśli warunki lub cokolwiek trzeba zrobić, aby naprawić ścieżki.

Powiązane problemy