Špatná výjimka pokud továrnička nevrací IComponent
- jtousek
- Člen | 951
Ahoj, narazil jsem na drobnou potíž. Zapomněl jsem do továrničky napsat řádek return s tou nově vytvořenou komponentou. Laděnka zaječela „Component with name ‚$name‘ does not exist.“ takže jsem zkoušel hledat chyby jako špatně pojmenovaná továrnička a podobné, protože jsem myslel, že se továrnička vůbec nespustí. Chtělo by to zvláštní chybu pro případ, kdy továrnička sice existuje, ale nevrací to, co by vracet měla.
- Ondřej Brejla
- Člen | 746
S tím jsem zrovna problém nikdy neměl. „Komponenta neexistuje? Tak to jsem se asi přepsal, nebo ji nepřipojil…“. Ale tak special chyba by asi přispěla k větší přehlednosti…
- mkoubik
- Člen | 728
„Component with name ‚$name‘ does not exist.“ pro mě spíš než „zapomněl jsem na return“ znamená „zapomněl jsem komponentě strčit předka do konstruktoru“. Když se to returnování v továrničkách odnaučíš, tak ta hláška začne dávat smysl.
Mimochodem má
protected function createComponentFoo() {
return new Foo;
}
nějakou výhodu oproti
protected function createComponentFoo($name) {
$foo = new Foo($this, $name);
}
?
- jtousek
- Člen | 951
Aha už to chápu. Továrnička nemusí komponentu vracet, protože ji může sama připojit, takže takováhle hláška by byla naopak špatně.
Na druhou stranu se mi moc nelíbí, že existují dva způsoby a není mezi nimi prakticky žádný rozdíl a nikdo neříká, který by se měl používat. Mám raději když je prostě jeden způsob než takovýhle WTF.
Btw. k čemu vlastně je ten argument $name? Komponenta už přeci jméno má (z názvu továrničky).
- bojovyletoun
- Člen | 667
myslím že jde o syntaktický cukr. Protože jinak bys jméno předával nějak takto(edit: pro variantu s returnem):
function createComponentFormatDisk(){
$c=new AppForm($this,substr(__METHOD__,strlen('createComponent');
$c->addDynamicContainer();
}
Jinak za sebe používám možnost s return
.
Editoval bojovyletoun (9. 2. 2011 22:03)
- Ondřej Mirtes
- Člen | 1536
Je to syntaktický sugar, abys nemusel psát tohle:
protected function createComponentSomeForm()
{
$form = new AppForm($this, 'someForm');
}
- jtousek
- Člen | 951
Promiň ale stále nevidím rozdíl v těchto dvou zápisech. Respektive mi uniká smysl druhého z nich, který je zbytečně delší, méně srozumitelný a v některých případech (setMethod u AppForm) i nepraktický. Proč tedy ten druhý někteří preferují?
protected function createComponentFoo() {
return new Foo;
}
protected function createComponentFoo($name) {
$foo = new Foo($this, $name);
}
EDIT: Asi se v tom až příliš šťourám, jako ve všem, tak mě pls omluvte…
Editoval jtousek (9. 2. 2011 23:32)