Method chaining és a konstruktorok
Hi
Bocs a rossz fogalmazásért, nem tudom mi a magyar szakszó erre (összefűzés?).
Nagyon szeretem ezt a típusú írásmódot használni:Viszont mégsem működik így:A php oldalon fent van mint "bug", de igazából nem értem, mert logikus lenne, hogy működjön, vajon javítani fogják ezt, vagy valami számomra ismeretlen okból ez így marad (5.2.5 alatt még nem megy)?
http://bugs.php.net/bug.php?id=34502
Nem az lenne értelmes hogy a new valami() már használható objektumra mutat, ha a konstruktor elvileg (és azért van végülis) az objektumra kéne hogy mutasson (mintha return $this lenne)?
■ Bocs a rossz fogalmazásért, nem tudom mi a magyar szakszó erre (összefűzés?).
Nagyon szeretem ezt a típusú írásmódot használni:
$a = new valami();
$a -> foo() -> bar() -> stb();
$a = new valami() -> foo() -> bar();
http://bugs.php.net/bug.php?id=34502
Nem az lenne értelmes hogy a new valami() már használható objektumra mutat, ha a konstruktor elvileg (és azért van végülis) az objektumra kéne hogy mutasson (mintha return $this lenne)?
factory
5.3 -al sem akaródzik
a factory is jó megoldás, vagy egy pici funkció is megteszi:
a new myClass() "visszatérési értékének" nem sok köze van egyébként a __construct() függvényhez, legalábbis hiába return-ölsz bármit belőle, nem fog a példád szerinti $a -ba kerülni.
ha meg mindenképp magyarítani akarod, akkor megtenné a 'metódus láncolás' is :)
egyébként én is szeretem :)
vannak vele problémák és aggályok, az egyik: a hibák kezelése, nem dobhatsz vissza pl false-t mert akkor ugye megtörik a lánc... lehet mondjuk exception-özni, ami tönkrevágja az egésznek a legnagyobb előnyét, a rövidítést és átláthatóságot. vagy lehet használni egy 'chainbreaker' classt, ami valahogy így néz ki:
egy másik baj, hogy okosan kell megtervezni a class-eket, mert ha a methodok egyik fele chainelhető a másik meg nem, a harmadik fele meg nem önmagát dobja vissza, hanem valami tökmás objektumot (neadjisten skalárt), akkor átláthatatlan lesz az egész... plusz, sokszor nem egyértelmű, hogy az adott objecten kellene csinálni valamit, vagy egy új objektum kell, megváltozott tulajdonságokkal. pl: string obj (ami ugyan nincs, de lehet írni ;) ) esetén a $myString->substr() hívásnak a legritkább esetben kell saját magát átírnia, viszont ha mindig új string objektet dobsz vissza, akkor többszörös futásidővel lehet számolni, mintha saját magát módosítgatná...