10 Stimmen

Variablen innerhalb von Objektoperatoren

Ich versuche, einen variablenbasierten Objektoperator in PHP einzurichten, bin aber nur bedingt in der Lage, das zu erreichen, wonach ich suche. Der folgende Code erlaubt zum Beispiel die Auswahl von Variablen:

$var1 = 'available_from';
$keyValuePairs[$key] = $item->parent()->{$var1};

Wenn ich jedoch den übergeordneten Selektor ebenfalls zu einer Variablen machen möchte, scheint das nicht mehr möglich zu sein. Beide der folgenden Methoden schlagen fehl:

$var1 = 'parent()->available_from';
$keyValuePairs[$key] = $item->{$var1};

y

$var1 = 'parent()';
$var2 = 'available_from';
$keyValuePairs[$key] = $item->{$var1}->{$var2};

Die Frage ist also, ob es eine Möglichkeit gibt, dies zu tun.

29voto

cwallenpoole Punkte 75701

Das kann man im Prinzip auch machen, aber man muss die Parens außen anbringen.

$var1 = 'parent';
$var2 = 'available_from';
$keyValuePairs[$key] = $item->{$var1}()->{$var2};
// or $keyValuePairs[$key] = $item->$var1()->{$var2};

Und es gibt im Grunde keine Möglichkeit, dies zu umgehen, ohne eval zu verwenden:

// escape the first $
$keyValuePairs[$key] = eval( "\$item->$var1->$var2" );

Aber es gibt wirklich keinen Grund, eval zu verwenden, wenn Sie zuerst Zugriff auf den potenziellen Satz von Variablen haben.

Sie können das Problem auf folgende Weise umgehen:

function call_or_return( $obj, $prop )
{
    // test to see if it is a method (you'll need to remove the parens first)
    $arr = array( $obj, $prop );
    // if so call it.
    if( is_callable( $arr ) ) return call_user_func( $arr );
    // otherwise return it as a property
    return $obj->$prop;
}

call_or_return( $item, $var1 )->{$var2};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X