Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Auto ładowanie klas
Vion
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 2
Dołączył: 27.06.2008

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


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


--------------------
www.zapalara.pl
Go to the top of the page
+Quote Post
jaslanin
post
Post #2





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


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

Ten post edytował jaslanin 29.10.2012, 20:37:08


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
Vion
post
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 2
Dołączył: 27.06.2008

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


gdy podaje scieżkę bezwzględną to też nie działa


--------------------
www.zapalara.pl
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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.



--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Vion
post
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 2
Dołączył: 27.06.2008

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


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)


--------------------
www.zapalara.pl
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
jaslanin
post
Post #7





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


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


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
Vion
post
Post #8





Grupa: Zarejestrowani
Postów: 112
Pomógł: 2
Dołączył: 27.06.2008

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


kurcze a jak wyrzucić na ekran wartosc z realpath()



Ten post edytował Vion 29.10.2012, 21:34:51


--------------------
www.zapalara.pl
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #9





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Dodać echo na początku.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
jaslanin
post
Post #10





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


źle:
  1. private function __constructor()

źle:
  1. if (self::$loader = null)


Ten post edytował jaslanin 29.10.2012, 21:47:06


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
Vion
post
Post #11





Grupa: Zarejestrowani
Postów: 112
Pomógł: 2
Dołączył: 27.06.2008

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


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


--------------------
www.zapalara.pl
Go to the top of the page
+Quote Post
jaslanin
post
Post #12





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


nie poprawiłeś, google i szukaj każdej rzeczy której używasz, i sprawdzaj literka po literce czy się zgadza.


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
Vion
post
Post #13





Grupa: Zarejestrowani
Postów: 112
Pomógł: 2
Dołączył: 27.06.2008

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


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()


--------------------
www.zapalara.pl
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 Aktualny czas: 20.08.2025 - 12:56