Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]autoloader
Forum PHP.pl > Forum > Przedszkole
Quider
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?
Cysiaczek
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
Quider
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 ;/
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.