Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> __autoload zaimplementowana wewnątrz klasy, nie działa, gdy została już zaimplementowana wcześniej...
Luneth
post 23.07.2010, 02:22:18
Post #1





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

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


Witam, załóżmy, że mamy taki przykładowy kod:
  1. <?php
  2. function __autoload($name)
  3. {
  4. echo 'a';
  5. }
  6.  
  7. class Sample
  8. {
  9. function __autoload($name)
  10. {
  11. echo 'b';
  12. }
  13. function sample()
  14. {
  15. $instance = new SampleName();
  16. }
  17. }
  18.  
  19. $instance = new Sample();
  20. $instance->sample();
  21. ?>


Wówczas i tak do załadowania zostanie wykorzystana funkcja wyświetlająca 'A', poza klasą. Czy można przeciążyć funkcję __autoload() tak, aby w powyższym przypadku wyświetliło się 'B' ?

Ten post edytował Luneth 23.07.2010, 02:23:13


--------------------
"It's always darkest before the dawn."
Go to the top of the page
+Quote Post
_olo_1984
post 23.07.2010, 07:16:13
Post #2





Grupa: Zarejestrowani
Postów: 289
Pomógł: 77
Dołączył: 5.08.2006

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


nie wiem czy dokładnie o to chodzi, ale zobacz spl_autoload_register


--------------------
awake
Go to the top of the page
+Quote Post
Luneth
post 23.07.2010, 12:09:45
Post #3





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

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


Patrzyłem już, próbowałem i nie mogę chyba ogarnąć działania tej funkcji albo to się nie sprawdza w tym przypadku...


--------------------
"It's always darkest before the dawn."
Go to the top of the page
+Quote Post
wookieb
post 23.07.2010, 12:14:57
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie możesz przeciążyć standardowego __autoloada
A to co kolega podał powinieneś używać ZAMIAST __autoload aby działało w pełni prawidłowo.


--------------------
Go to the top of the page
+Quote Post
Luneth
post 23.07.2010, 12:30:55
Post #5





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

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


Swoją droga stosuję autoładowanie klas tylko w dwóch przypadkach jak na razie, gdy trzeba załadować kontroler, albo element menu, obsługujący linki, wstawienie tam statystyk, ankiety lub czegoś. Może lepszym rozwiązaniem jest zrobić jednak __autload() tylko np z mapą, żeby obsługiwało każdą istniejącą klasę (no z wyjątkiem singletonów)?


--------------------
"It's always darkest before the dawn."
Go to the top of the page
+Quote Post
wookieb
post 23.07.2010, 12:36:09
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A znasz takie schemat ładowania klas?
Kod
nazwa_klasy = nazwa/klasy.php
nazwa_klasy_dluzsza = nazwa/klasy/dluzsza.php

Oczywiście pozostaje odpowiednio obsłużyć include_path


--------------------
Go to the top of the page
+Quote Post
Luneth
post 23.07.2010, 14:13:53
Post #7





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

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


Wprowadzenie tego schematu kosztowałoby mnie w chwili obecnej nieco więcej zmian, dlatego szukałem sposobu na przeciążenie __autoload, szkoda, że takiej możliwości w php nie ma.


--------------------
"It's always darkest before the dawn."
Go to the top of the page
+Quote Post
wookieb
post 23.07.2010, 14:19:07
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Luneth @ 23.07.2010, 15:13:53 ) *
Wprowadzenie tego schematu kosztowałoby mnie w chwili obecnej nieco więcej zmian, dlatego szukałem sposobu na przeciążenie __autoload, szkoda, że takiej możliwości w php nie ma.

Też tak miałem ale jest to jedno z lepszych rozwiązań. Oczywiście nie idealne, czasem wymaga modyfikacji lecz warto było.


--------------------
Go to the top of the page
+Quote Post
Luneth
post 23.07.2010, 14:46:47
Post #9





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

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


Czyli nazwa klasy zawiera ścieżkę do pliku z nią, czy tak? I ten string należy potraktować explodem?


--------------------
"It's always darkest before the dawn."
Go to the top of the page
+Quote Post
wookieb
post 23.07.2010, 14:52:35
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie musisz. Wystarczy
  1. function __autoload($classname)
  2. {
  3. $classpath = str_replace('_', '/', $classname').'.php';
  4. require_one $classpath;
  5. }


Ten post edytował wookieb 23.07.2010, 14:52:46


--------------------
Go to the top of the page
+Quote Post
Luneth
post 23.07.2010, 15:51:15
Post #11





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

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


Ostatnie pytanie. Czy to jest to co nazwałeś 'obsłużeniem include_path'?


--------------------
"It's always darkest before the dawn."
Go to the top of the page
+Quote Post
Crozin
post 23.07.2010, 16:12:40
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
A znasz takie schemat ładowania klas?
Kod
nazwa_klasy = nazwa/klasy.php
nazwa_klasy_dluzsza = nazwa/klasy/dluzsza.php
PHP 5.3 jest już na tyle "stabilne", że można korzystać z jego dobrodziejstwa jakim są przestrzenie nazw, a nie taki burdel w nazewnictwie. Przy czym sama metoda pozostaje taka sama jakby na to nie patrzeć.
Cytat
Ostatnie pytanie. Czy to jest to co nazwałeś 'obsłużeniem include_path'?
tak ciężko?
Go to the top of the page
+Quote Post
Luneth
post 23.07.2010, 16:53:30
Post #13





Grupa: Zarejestrowani
Postów: 95
Pomógł: 7
Dołączył: 16.07.2007
Skąd: Gorzów Wielkopolski

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


Oczywiście, że nie, sam to zrobilem od razu, ale chciałem wiedzieć co autor posta miał na myśli winksmiley.jpg
edit: Przestrzenie nazw rozwiązanie ciekawe zaś znaleźć hosting z php 5.3 trudno trochę.

Ten post edytował Luneth 23.07.2010, 18:53:54


--------------------
"It's always darkest before the dawn."
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: 12.06.2025 - 11:23