2016-07-26 12 views
0

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

'$ 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. –

+0

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? –

+0

Danke, aber das ist mein Problem nicht gelöst. Ich habe es versucht, aber Ergebnis s 0 auf meinem Bildschirm. – ireaf

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