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 *
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;
    }
}



?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0