Portál AbcLinuxu, 8. května 2025 13:29
Catchable fatal error: Object of class FAV could not be converted to string in...Mám třídy
class FAV { private $varFav; public function __construct() { $this->varFav = 'blablabla'; $this->getVar(); } private function getVar() { return $this->varFav; } } class Book { private function getAutor() { .. code .. return $string; } private function getYear() { .. code .. return $string; } private function getFavo() { $obj = new FAV(); return $obj; } private function getGenre() { .. code .. return $string; } public function __toString() { return $this->getAutor(). $this->getYear(). $this->getFavo(). $this->getGenre(); } } $book = new Book(); echo $book;Díky dík..
Řešení dotazu:
class FAV { private $varFav; public function __construct() { $this->varFav = 'blablabla'; } private function getVar() { return $this->varFav; } private function __toString() { return getVar(); } } Nebo takto ? class FAV { private $varFav; public function __construct() { $this->varFav = 'blablabla'; } private function __toString() { return varFav; } }Díky
class FAV { private $varFav; function __construct() { $this->varFav = 'blablabla'; } function __toString() { return $this->varFav; } }Ovšem pokud ten konstruktor nemá žádný parametr, úplně by stačila tato verze:
class FAV { function __toString() { return 'blablabla'; } }Taková třída by však nebyla moc užitečná.
Mělo by fungovat obojí, v obou případech tam však jsou chyby.Ať hledám jak hledám žádná rozdíl jsem tam nenašel, tak v čem jsem měl chyby? Použití private a public před metodama je špatně?
private function getFavo() { $class = 'FAV'; if(class_exists($class, true)) { $obj = new $class(); return $obj; } else { throw new Exception('Chyba!'); } }Pořád mi to vrací chybu:
Fatal error: Method Book::__toString() must not throw an exception in...a nevím jak to mám jinak kontrolovat... Děkuji ještě za pomoc..
private function getFavo() { $class = 'FAV'; return new $class(); }
Mně zase hlava nebere, k čemu vlastně potřebuješ tu hromadu zbytečných get...(). Gettery se přece nedělají, protože porušují zapouzření objektů.Jako tohle je špatně?
private function getAutor() { .. } private function getYear() { .. } private function getFavo() { .. } private function getGenre() { .. }pokud ano, tak jak mají být pojmenovány ty metody?
Vzor Factory sice používám, ale místo testování existence třídy zachytávám fatální chyby.A prozradíš jak na to? Díky
{return $this->author;}
?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.