| 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: 7 let
|
|||
0