Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Autoloader - jak działa
Forum PHP.pl > Forum > PHP > Object-oriented programming
Szymciosek
Witam,
tak jak w temacie, chciałem zrobić autoloader, z którym w sumie nie ma problemu, bo ładuje pliki itd.
Ale zaczęło mnie teraz zastanawiać na jakiej zasadzie działa autoloader w Symfony2, gdzie w jednym miejscu ładuję potrzebne pakiety (vendors), a w każdym kontrolerze poprzez wpisanie przez deklaracją klasy:
Kod
use Symfony\...\;


Jak to działa?
Jak to samemu zrealizować?
skowron-line
http://www.php.net/manual/en/function.spl-...load.php#110142 tu masz prosty przykład.
Szymciosek
Nie bardzo chyba to rozumiem.
I czy muszę to mieć w każdej kolejnej klasie? Jeśli tak, to nie o to mi chodzi tylko o to żeby była jedna klasa Autoloader, a wszystko dalej działać już będzie automatycznie.

Czyli w autoloaderze includuje plik z klasą Test.php, a później już w każdym innym powiedzmy, że kontrolerze mam dostęp do tych metod poprzez np. Test->testMethod();
bez żadnych innych deklaracji, że plik ma być ponownie ładowany specjalnie dla kontrolera.
skowron-line
  1. spl_autoload_extensions('.class.php'); // <------ definiujesz rozszerzenie klasy
  2. spl_autoload_register('loadClasses'); // <------- definujesz jaka funkcja/klasa bedzie autoloaderem robisz to raz na początku swojego skryptu, jeżeli wszystko przechodzi przez plik index.php to tam to robisz i nigdzie indziej
  3.  
  4. function loadClasses($className) // <----- parametr to nazwa klasy (proste) przy każdym wywołaniu new Class_Name ta funkcja jest odpalana z parametrem Class_Name
  5. {
  6.  
  7. if( file_exists(ROOT_DIR.DS.'controller/'.$className.'.class.php' ) ){ // <--- tu sprawdza czy w podanej lokalizacji istnieje klasa której szukasz
  8. set_include_path(ROOT_DIR.DS.'controller'.DS); //<--- tu nie ma co pisać <a href="http://www.php.net/manual/en/function.set-include-path.php" target="_blank">http://www.php.net/manual/en/function.set-include-path.php</a>
  9. spl_autoload($className); <--- wywołanie autoloadera po raz kolejny
  10. }
  11. elseif( file_exists('model/'.$className.'.class.php' ) ){
  12. set_include_path(ROOT_DIR.DS.'model'.DS);
  13. spl_autoload($className);
  14. }elseif( file_exists('view/'.$className.'.class.php' ) ){
  15. set_include_path(ROOT_DIR.DS.'view'.DS);
  16. spl_autoload($className );
  17. }else
  18. {
  19. set_include_path(ROOT_DIR.DS.'lib'.DS);
  20. spl_autoload($className );
  21. }
  22. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.