Nekontrola typehintu. rubrika: Programování: PHP

9 Taco
položil/-a 22.5.2019

Mám tu zajímavou chybu. Absolutně netuším, co mi uniká. Díky moc všem za nakopnutí.

public function setDateFrom(\DateTime $val = Null)
{
    var_dump($val); // string(10) "10.10.2019"
    echo PHP_VERSION; // 5.6.31
    die();
}

Komentáře

  • Kit : Tato část kódu funguje, žádnou chybu mi nehlásí. Záleží samozřejmě na parametru - string to nežere, ale DateTime funguje. V čem konkrétně má být problém? http://sandbox.onlinephpfunctions.com/code/6ba4a194426f4b60ee870e9223a09... 22.5.2019
  • Tomáš Votruba : Kde to funguje? Všude to padá: https://3v4l.org/cI5QU 22.5.2019
  • Taco : Jo. Taky jsem nevěřil svým očím. 23.5.2019
  • Kit : Máš tam navíc setDateFrom('10.10.2019'); Pak to samozřejmě fungovat přestane. 23.5.2019
  • Taco : @Tomáš Votruba: Nevím jak se chová ten online https://3v4l.org. Zdá se, jakoby to na první chybě chcíplo. Každopádně https://3v4l.org/m9Ofm má na 5.6.31 tuto divnou vlastnost. (Koukám, že ty online testery jsou taky svět sám o sobě. Většina z nich ten set_error_handler zakázala. V http://phptester.net/ to jde, respektive nejde, tu chybu poustí :-)) 23.5.2019
odkaz Vyřešeno
9 Taco
odpověděl/-a 22.5.2019

Tak jsem na to přišel. Typehint je zřejmě "tolerovatelná" chyba, nebo jak to říct :-)

Měl jsem tam toto:

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    //~ echo "ERROR: [$errno], [$errstr], [$errfile($errline)], ";
}, E_RECOVERABLE_ERROR);

Komentáře

  • Kit : PHP 7.2 to netoleruje ani s handlerem. 22.5.2019
  • spazef0rze : V PHP 5 a v PHP 7 nesprávné typy předaných parametrů generují jiné typy chyb: "If the given value is of the incorrect type, then an error is generated: in PHP 5, this will be a recoverable fatal error, while PHP 7 will throw a TypeError exception." https://www.php.net/manual/en/functions.arguments.php#functions.argument... V PHP 5 to vygeneruje E_RECOVERABLE_ERROR a pokud ji zachytíš a nic neuděláš, tak se pokračuje dál. V PHP 7 by podobný kód, který umlčí chybu, vypadal třeba takhle https://3v4l.org/DDEC8 (V PHP 7 to háže výjimku, negeneruje to chybu, takže se to nedostane k tomu var_dumpu). 24.5.2019
  • Taco : @spazef0orze: Tvůj příklad z PHP7 je pořádku. Vůbec bych to jako paralelu k mé ukázce neviděl. Každopádně, zase jsem o nějaký další gotcha chytřejší :-) 1.6.2019

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.