Portál AbcLinuxu, 13. května 2025 02:46
throw new Exception('Chybové hlášení');
class Forms{ private $input = array(); private $textarea = array(); private $layout; public function __construct(){ try{ $this->getInput(); $this->getTextarea(); $this->getButton(); $this->setLayout(); }catch (PDOException $e){ $this->setLayout(); } } private function getInput(){ if($a === true) //Vyvoláme chybu throw new Exception('Chyba!'); } private function getTextarea(){} private function getButton(){} private function setLayout(){ $this->layout = $input[0]. $input[1]. $input[2]. $textarea[0]. $textarea[1]; } public function __toString(){ return $this->layout(); } } $forms = new Forms(); echo $forms;
$this->layout
pokud nektera z metod vyhodi vyjimku..
private $input = array(); private $textarea = array(); // v konstruktoru $this->getInput();Zřejmě metodou
getInput()
plníš pole $input
. Jenže to tak být nemusí. Co třeba takto?
private $input; private $textarea; // v konstruktoru $input = new Input();a v metodě
__toString()
ty dva objekty spojíš do jednoho stringu.
$this->layout
vůbec neměla existovat. Přece se i v OOP dělá normalizace. Nebo snad ne?
1. ano, závorky tam nepatří, čili to má být takto $this->layout; 2. no to jsou pole, ne proměnné 3. ano, vypadl řádek $a = true;
class Forms { private $input = array(); private $textarea = array(); public function __construct(){ try { $this->getInput(); $this->getTextarea(); $this->getButton(); } catch (PDOException $e){ $input = array(); $textarea = array(); } } private function getInput() { if($a === true) //Vyvoláme chybu throw new Exception('Chyba!'); } private function getTextarea() {} private function getButton() {} public function __toString(){ return implode('', $this->input) . implode('', $this->textarea); } } $forms = new Forms(); echo $forms;
//if($a === true) //Vyvoláme chybuabych vyvolal chybu kterou odchytím a pokračuji dál dle nastaveni, tak dostávam chybu:
Fatal error: Uncaught exception 'Exception' with message 'Chyba!'Proč? Díky
Exception
, ale zachytáváš PDOException
. Pokud tu předponu "PDO" vyhodíš, bude to fungovat.
} catch (PDOException $e){napiš jen
} catch (Exception $e){Takovou kravinu sis mohl klidně opravit sám. Měl jsi to tak chybně v originále a pouze jsem to přehlédl.
public function __construct(){ try{ $this->getInput(); $this->getTextarea(); $this->getButton(); $this->setLayout(); }catch (PDOException $e){ $this->setLayout(); } }myslel tim, ze misto zachytavani
PDOException
tam mas mit obecnou Exception
, takze tim zachytis jakoukoliv vyjimku, ne jen vyjimky ktere jsou instancemi PDOException
protože do atributů objektu se dávají jen atomické a strukturované údaje, nikoli agregáty.Můžeš mi prosím tohle objasnit?
try { .. } catch (Exception $e){ .. }a volání metod patří do __toString() ?
try { echo $a; // tohle by mělo vyhodit chybu, že není inicializovaná prom. $a } catch (Exception $e){ echo "$e"; // a zprávu o té chybě bych chtěl dostat sem }A pak už bych byl velký frajem a změnil bych si i NICK
isset($a)
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.