Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Autoloader - jak działa, Czyli jak uzyskać dostęp do klas w każdym miejscu
Szymciosek
post
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


http://www.php.net/manual/en/function.spl-...load.php#110142 tu masz prosty przykład.
Go to the top of the page
+Quote Post
Szymciosek
post
Post #3





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


  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. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.09.2025 - 20:14