Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]autoloader
Quider
post 7.05.2010, 00:26:14
Post #1





Grupa: Zarejestrowani
Postów: 91
Pomógł: 9
Dołączył: 6.03.2009
Skąd: Katowice

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


Od razu mówię, że przeglądałem forum za moim problemem, ale nie natknąłem się na nic konkretnego więc jeśli będziecie na tyle mili i wskażecie wątek, w którym znajdę choć trochę informacji będę wdzięczny. Przestudiowałem też kod kohany uważnie oraz manual nt spl_autoload_register.

Sprawa ima się automatycznego ładowania klas. W Kohanie jest to rozwiązane poprzez dodawanie do klas przyrostków, w ten sam sposób chciałem rozwiązać ładowanie klas w moim skrypcie. Głównie chodzi mi o to, aby pozostać wiernym ideologii MVC, a w autoloaderze nie przepuszczać parametru przez pętle.

Otóż w Kohanie rozwiązane to jest w następujący spoósb:
  1. public static function auto_load($class)
  2. {
  3. if (class_exists($class, FALSE))
  4. return TRUE;
  5. if (($suffix = strrpos($class, '_')) > 0)
  6. {
  7. // Find the class suffix
  8. $suffix = substr($class, $suffix + 1);
  9. }
  10. else
  11. {
  12. // No suffix
  13. $suffix = FALSE;
  14. }
  15.  
  16. if ($suffix === 'Core')
  17. {
  18. $type = 'libraries';
  19. $file = substr($class, 0, -5);
  20. }
  21. elseif ($suffix === 'Controller')
  22. {
  23. $type = 'controllers';
  24. // Lowercase filename
  25. $file = strtolower(substr($class, 0, -11));
  26. }
  27. elseif ($suffix === 'Model')
  28. {
  29. $type = 'models';
  30. // Lowercase filename
  31. $file = strtolower(substr($class, 0, -6));
  32. }
  33. elseif ($suffix === 'Driver')
  34. {
  35. $type = 'libraries/drivers';
  36. $file = str_replace('_', '/', substr($class, 0, -7));
  37. }
  38. else
  39. {
  40. // This could be either a library or a helper, but libraries must
  41. // always be capitalized, so we check if the first character is
  42. // uppercase. If it is, we are loading a library, not a helper.
  43. $type = ($class[0] < 'a') ? 'libraries' : 'helpers';
  44. $file = $class;
  45. }


Ale powiedzcie mi w jaki sposób wyciągnąć z parametru $class ten przyrostek? Załóżmy, że wpisuję gdzieś w kodzie
  1. new Register
gdzie w całości jest to klasa
  1. Register_Sys
natomiast parametr $class przechwytuje tylko to, co wpisuję na sztywno w skrypcie czyli samo Register.

pytanie:
Jak zastosować taki myk jak jest w Kohanie?


--------------------
www.quider.pl <- moja prywatna strona

Pomogłem? Kliknij Pomógł
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Cysiaczek
post 7.05.2010, 06:40:33
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




No ten kod co podałeś robi właśnie to, co chcesz zrobić, więc nie rozumiem pytania.
Jeśli chcesz, aby z samej nazwy Register szukał pliku używając różnych prefixów lub sufixów, to dodaj je w autoloaderze i próbuj załadować tak utworzone nazwy, czy wręcz ścieżki plików. Osobiście jednak wolę, gdy nazwę klasy podaje się wprost i jednocześnie tej nazwie odpowiada plik o takiej samej nazwie jak klasa. To, że może kiedyś pojawi się potrzeba załadowania innego pliku o tej samej nazwie, to już temat na inna rozprawę smile.gif

Pozdrawiam


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Quider
post 7.05.2010, 18:49:52
Post #3





Grupa: Zarejestrowani
Postów: 91
Pomógł: 9
Dołączył: 6.03.2009
Skąd: Katowice

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


Problem w tym, że mając taki kod i piszę w kodzie gdzieś
  1. new Register
wiedząc, że mam klasę Register_Sys, to on (skrypt) szuka mi tylko klasy register nie zwracając uwagi na żadne suffixy ;/


--------------------
www.quider.pl <- moja prywatna strona

Pomogłem? Kliknij Pomógł
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:29