Heutzutage versuche ich ein PHP-Framework für eigene Kunden zu entwickeln. In meiner App möchte ich $ instance->propertyName als Parameter übergeben. Aber brauchen Sie nicht $ instance->propertyName Wert. Nur ich möchte propertyName Teil als Zeichenfolge Wert verwenden. Kann ich propertyName als Zeichenfolge verwenden? Bitte helfen Sie mir ...PHP-Instanz Eigenschaft Name zu String als Methode Parameter
0
A
Antwort
0
Es gibt keine einfache Möglichkeit, dies zu erreichen. Sie wollen so etwas wie dieses
function foo($bar)
{
//here you want to know the name of the variable that passing the value
}
$x = 5;
$y = 5;
foo($x); //here you want to know the name 'x' of the variable
foo($y); //here you want to know the name 'y' of the variable
In beiden Fällen Funktion wissen, nur Informationen über Wert 5
und nothig über Namen der Variablen liefern den Wert erhalten.
Wenn Sie den Namen der Variablen kennen (oder Objekt-Eigenschaft), der Wert in Methode liefert dann können Sie etwas sehr ineffizient wie diese
class someClass
{
public $someProperty;
}
class otherClass
{
public function setSomething($arg)
{
$trace = debug_backtrace();
$vLine = file($trace[0]['file']);
$fLine = $vLine[$trace[0]['line'] - 1];
preg_match("/(.*?)\((.*?)->(.*?)\)/i", $fLine, $match);
var_dump($match[3], $arg);
}
}
$t = new someClass();
$t->someProperty = 5;
$o = new otherClass();
$o->setSomething($t->someProperty);
Die var_dump
im setSomething
Methode zurückkehren der Name und der Wert der Eigenschaft
string (12) "someProperty" int (5)
Diese Lösung basiert auf der Idee von diesem Beitrag https://stackoverflow.com/a/404637/4662836
'$ foo = $ obj-> foo; echo $ foo; 'Wenn Sie Lust haben, dann können Sie' $ foo & = $ obj-> foo' machen, also wird '$ foo' aktualisiert, wenn Sie' $ obj-> foo' ändern. –
Ich weiß es nicht was er meint, aber ich denke nicht, dass es das ist. Meinst du mit $ instance -> $ variablePropertyName. Oder meinst du das Umwandeln von $ instance-> propertyName in $ propertyName als eine Variable, die den String "propertName" enthält? –
Danke, aber das ist mein Problem nicht gelöst. Ich habe es versucht, aber Ergebnis s 0 auf meinem Bildschirm. – ireaf