Autor | Zpráva | ||
---|---|---|---|
MaK Profil |
#1 · Zasláno: 5. 8. 2020, 09:39:12
Následující kód vypíše "666kobliha". To je funkcionalita PHP nebo jeho chyba?
class aaa { public function a() { echo $this->b(); echo static::HESLO; } } class bbb extends aaa { public function b() : int { return 666; } const HESLO = 'kobliha'; } $x = new bbb; $x->a(); MaK |
||
Kajman Profil |
#2 · Zasláno: 5. 8. 2020, 09:44:06
Přijde mi to spíše, že potomek vidí sám do sebe zděděnou funkcí.
|
||
MaK Profil |
#3 · Zasláno: 5. 8. 2020, 10:05:46
Kajman:
Mně to přijde spíše jako chyba. Třída aaa může volat pouze vlastní funkce a vlastní konstanty. Ta otázka zůstává. Zamýšlená funkcionalita PHP nebo chyba? |
||
blaaablaaa Profil |
#4 · Zasláno: 5. 8. 2020, 10:13:06
MaK:
Volá statickou veřejnou konstantu HESLO z aktuálního kontextu, při zavolání přímo z aaa ale vyhodí fatal error, protože konstanta neexistuje. |
||
N71 Profil * |
#5 · Zasláno: 5. 8. 2020, 13:43:03
Co se volání neexistující metody týče, chybu vyhodí PHP až v runtime, takže to můžeme připsat na vrub obecné tolerantnosti PHP. Technicky má metoda a() přístup do b(), protože je neprivátní. Slušně vychovaný linter ti takové zavolání metody podtrhne. Správně bys měl doplnit abstraktní metodu b() do třídy aaa.
|
||
Časová prodleva: 4 roky
|
0