Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
Reálně potřebuji zavolat toto
$that->{$arrows[0]}->{$arrows[1]}->__toString() ;
Což je funkční a legitimní kód. Nicméně, v poli $arrows nikdy nevím kolik toho bude (1 - n) hodnot, a nevím jak to složit, aby se to dalo dynamicky zavolat. Ono se pak vlastně na pozadí vykoná něco jako $objekt->vazba->jinavazba->sloupec->__toString(); Má někdo nápad jak nebo čím to prohnat, aby se to vykonalo jako bych to napsal ručně? Jediné co mě napadá je EVAL, ale tomu se chci skutečně vyhnout. |
||
Alphard_ Profil * |
#2 · Zasláno: 9. 10. 2018, 18:40:42
Jestli to dobře chápu, skáčeš tam přes vnořené instance, ty si můžeš snadno držet v proměnné a prolézt to cyklem.
function getRef($source, $members) { foreach ($members as $member) { $source = $source->{$member}; } return $source; } getRef($objekt, ['vazba', 'jinavazba', 'sloupec'])->__toString(); Jestli hledáš variantu bez cyklu, to mě bohužel nenapadá. |
||
Kcko Profil |
Alphard:
Zhruba před chvíli než jsem se podíval, mě napadlo toto, což jak koukám, je to něco podobného co jsi napsal :-). Cyklus je v pohodě, nemohl jsem to na konci pracovního dne vymyslet. Díky! <?php $a = new A; foreach (['b', 'c', 'd'] as $m) { $a = $a->$m; } echo $a; class A { public function __get($value) { $o = new $value; return $o; } } class B extends A { } class C { public function __get($value) { return 'finalni hodnota z posledniho objektu - ' . $value; } } ?> |
||
Časová prodleva: 6 let
|
0