Autor Zpráva
Ofi
Profil
Zdravím mám takový problém, v některých třídách používám type hinting, uvedu příklad:
public function insertObject(AbstractDObject $object) {
// kód
}


problém je v tom, že když je zadán špatný argument tak mi to vypíše tuto chybu:
"Catchable fatal error: Argument 1 passed to Database::insertObject() must be an instance of AbstractDObject, string given, called in D:\my_web_apps\easy_query\index.php on line 24 and defined in D:\my_web_apps\easy_query\Database.php on line 97"

což by samo o sobě nebyl problém, jenže já bych jí skutečně potřeboval "zachytit" (catch) a provést opravný kód... ten zrádný problém je v tom, že tahle "catchable - zachytitelná" chyba se mi nedaří zachytit... žádná formulace try {} catch() {} mě nedobrala kýženého výsledku.. mohl by mi někdo poradit? třeba už jste se s tímto někdo setkal :) díky předem...

P.S. toho názvu "easy query" si nevšímejte, je to vlastní knihovna kterou v současné době právě modifikuji, vylepšuji...
Majkl578
Profil
PHP chybu nelze zachytit pomocí try...catch.
Řešením může být až následná validace v metodě:
public function insertObject($object)
{
  if (!($object instanceof AbstractDObject)) {
    throw new InvalidArgumentException('blahblah');
  }
  // kód
}
Pro type hinting v IDE se používají i PHP Doc komentáře s definicemi parametrů, návratového typu apod.
Nox
Profil
Majkl578:
PHP chybu nelze zachytit pomocí try...catch.
leda pomocí set_error_handler volat funkci co hodí výjimku... měl sem pocit že o tom psal Vrána, ale nenašel jsem to u něj
Ofi
Profil
reaguji na Majkl578:
Díky, je to jednou z variant a pokud nebude jiná možnost jak chybové hlášení efektivně "ovládnout" tak mi nezbyde nic jiného než ji také použít.

reaguji na Nox:
Díky za tip. Podívám se na to. a případně pohledám zase na netu. ;)

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