Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 5.02.2007 Ostrzeżenie: (0%)
|
Witam,
Przypadkowo wpadłem na pewne rozwiązanie które ułatwi mi pracę, aczkolwiek nie wiem czy nie jest to po prostu bugiem w PHP i z czasem mój skrypt przez to może nie działać. Otóż mam sobie 2 klasy:
Wynikiem tego kodu jest: Kod object(B)#1 (1) { ["zmienna"]=> NULL } Jak widać $this w klasie A zawiera obiekt z którego metoda test została wykonana - czyli B - czy jest to normalne zjawisko? (IMG:style_emoticons/default/smile.gif) Proszę o wytłumaczenie bo w manualu nic na ten temat nie znalazłem. Pozdrawiam. EDIT: Proszę o przeniesienie na podforum o obiektówce - dopiero teraz zobaczyłem że instnieje takie forum (IMG:style_emoticons/default/smile.gif) Ten post edytował hausner15 5.12.2010, 15:33:14 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%)
|
A::test() to wywołanie statyczne, więc jest do jak dla mnie uzasadnione. Funkcje, które tak wywołujesz, powinieneś poprzedzić słowem kluczowym static.
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 5.02.2007 Ostrzeżenie: (0%)
|
Tak wiem, jak poprzedzę słowem static to wtedy przy $this sypie błędem. Jednak przy takim wywołaniu działanie PHPa jest ciekawe - i nie powiem dla mnie przydatne.
Chodzi mi bardziej o to czy jest to ficzer czy błąd - ponieważ musiałbym wiedzieć czy w przyszłości nic się nie zmieni. Pozdrawiam Ten post edytował hausner15 5.12.2010, 15:42:15 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 200 Pomógł: 38 Dołączył: 1.12.2010 Skąd: Wrocław Ostrzeżenie: (0%)
|
Misie kolorowe....
Jeżeli funkcja jest statyczna to nie ma $this! jest self!
Toż to podstawy programowania są - druga kartka książek o obiektowości. Innymi słowy, wcale nie wykosałeś test() w klasie A, ale PHP w swojej jak to już napisał niżej Crozin, wywołał ją inline w klasie B, zatem to jest tylko i wyłącznie Twój błąd przy wykonaniu funkcji nie stetycznej jako statyczną - Strict Standards (co również jest napisane w dokumentacji) wywołuje wtedy taką metodę inline. czyli tak jakby była w tym miejscu, a nie w innej klasie. To żaden błąd, ani feature ;-) Ten post edytował Quadina 5.12.2010, 15:53:21 |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
Zacznijmy od tego, że kod ten wywala błąd:
Cytat Strict Standards: Non-static method A::test() should not be called statically, assuming $this from incompatible context in... Niestety PHP w swojej idiotoodporności nie wywali całego skryptu tylko zgłosi pewnego rodzaju informację.
|
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 51 Pomógł: 0 Dołączył: 5.02.2007 Ostrzeżenie: (0%)
|
Crozin to ciekawe bo u mnie ten kod jak najbardziej działa (PHP 5.2.5)...
Właśnie dlatego się pytam bo DZIAŁA pomimo że jest niepoprawne (myśląc logicznie). Pozdrawiam Dobra mój błąd: E_ALL nie obejmuje E_STRICTów i przez to nie wywalało mi błędów. Teraz już wszystko wiem. Dziękuję i pozdrawiam Ten post edytował hausner15 5.12.2010, 16:01:24 |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
Cytat Crozin to ciekawe bo u mnie ten kod jak najbardziej działa (PHP 5.2.5)... Włącz raportowanie błędów: http://ideone.com/pL1lPCytat Właśnie dlatego się pytam bo DZIAŁA pomimo że jest niepoprawne (myśląc logicznie). Bo w PHP wszystko, nawet najbardziej absurdalne konstrukcje zadziałają.
|
|
|
|
![]() ![]() |
|
Aktualny czas: 22.12.2025 - 14:05 |