Autor Zpráva
MaK
Profil
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
Přijde mi to spíše, že potomek vidí sám do sebe zděděnou funkcí.
MaK
Profil
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
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0