Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Auto ładowanie klas
Forum PHP.pl > Forum > Przedszkole
Vion
Witam
Mam taką klasę
  1. class AutoClassLoader
  2. {
  3. public static $loader;
  4.  
  5. private function __constructor()
  6. {
  7. spl_autoload_register(array($this, 'loadControllers'));
  8. }
  9.  
  10. public static function getInstance()
  11. {
  12. if (self::$loader = null)
  13. {
  14. self::$loader = new self();
  15. }
  16. return self::$loader;
  17. }
  18.  
  19. public function loadControllers($className)
  20. {
  21. var_dump($className);
  22. echo 'Ładuję klasę ' . $className . "<br>";
  23. $file = "/application/controllers/" . $className . '.php';
  24. var_dump($file);
  25. if (file_exists($file))
  26. {
  27. require_once $file;
  28. }
  29. }
  30. }


nastepnie w pliku index.php, mam
  1. require_once('config/AutoClassLoader.php');
  2.  
  3.  
  4. AutoClassLoader::getInstance();
  5. $obj= new DishController();


wg mnie powinno załadować klasę, ale wyrzuca mi błąd że brak klasy. Gdzieś jest błąd, ale gdzie ?sad.gif
jaslanin
tu jest błąd:

  1. $file = "/application/controllers/" . $className . '.php';


jest to ścieżka absolutna, mało prawdopodobne żeby była prawidłowa. sprawdź przez realpath gdzie kieruje ta ścieżka

PS. są ścieżki absolutne jak ta i względne
Vion
gdy podaje scieżkę bezwzględną to też nie działa
b4rt3kk
A na co Ci coś takiego? Przecież już jest taka funkcja.

  1. function __autoload($class) {
  2. require_once('sciezka/'.$class.'.class.php');
  3. }


wrzucasz coś takiego na początku pliku i każda zainicjowana nowa klasa jeśli jej nazwa jest zgodna z nazwą pliku sama się załaduje.

Np. masz plik mojaKlasa.class.php i taki kod:

  1. function __autoload($class) {
  2. require_once('sciezka/'.$class.'.class.php');
  3. }
  4.  
  5. $klasa = new mojaKlasa();


i wszystko będzie działać jak należy.

Vion
okej, Twoja porada zadziałała.

z tym że chciałbym użyć spl_autoload_register(), żeby móc obsługiwać wiele funkcji auto-ładujących (dla modelu,controllera,widoku)
b4rt3kk
Cytat(Vion @ 29.10.2012, 21:09:37 ) *
okej, Twoja porada zadziałała.

z tym że chciałbym użyć spl_autoload_register(), żeby móc obsługiwać wiele funkcji auto-ładujących (dla modelu,controllera,widoku)


No to myślę, że z powodzeniem samo __autoload wystarczy. Przecież wczyta każdą klasę po kolei.
jaslanin
właśnie chodzi o to byś podawał względną a nie absolutną wg. mnie

odnośnie __autoload to już nie powinno się tego używać, tak przynajmniej twierdzi manual: http://php.net/manual/en/language.oop5.autoload.php
Vion
kurcze a jak wyrzucić na ekran wartosc z realpath()

b4rt3kk
Dodać echo na początku.
jaslanin
źle:
  1. private function __constructor()

źle:
  1. if (self::$loader = null)
Vion
poprawiłem to, lecz nadal to samo.

dodałem w:

konstruktorze =>echo "1";
getInstance => echo "2";
loadControllers=> echo "3";

i jedyne co mi wypisało na ekran to 2
jaslanin
nie poprawiłeś, google i szukaj każdej rzeczy której używasz, i sprawdzaj literka po literce czy się zgadza.
Vion
dzięki wielkie!
Myślałem ze chodzi może o modyfikator private, a mimo że 100 razy patrzyłem na kod nie widziałem tego ładnego contructor()
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.