2016-04-20 6 views
1

Es tut mir leid, wenn diese Art von Frage zuvor gefragt wurde, aber ich konnte nichts finden, was meine Frage betrifft.Magic Methode holen und setzen Sie Werte dynamisch aus Array

Ich habe eine Klasse, die magische Methode wie get und set verwendet. Was ich will, ist die Eigenschaft eines Arrays als Set "Name", für den späteren Zugriff auf die Eigenschaft mit Get "Name".

Was ich jetzt tun:

$arr = array('name' => 'value') 
$this->obj->name = $arr['name']; 

Was ich will, und nicht funktioniert, wie ich versuche:

$arr = array('name' => 'value'); 

foreach($arr as $item) 
    $this->obj->[$item] = $item['name']; 

echo $this->obj->name; // result should be 'value' 
+1

Nö, '$ item' ist' value', '$ arr' ist nur eine flache Array, so ist es effektiv, "$ this-> obj-> Wert" – Ghost

Antwort

1

PHP mit magischen Methoden ist eigentlich ziemlich gut, dies scheint wie eine syntaktische Sache. Sie sollten in der Lage sein zu tun, was Sie wollen mit nur

foreach ($arr as $key => $item) 
    $this->obj->$key = $item; 

echo $this->obj->name; // Results in 'value' 
+0

Das vor ein paar Sekunden :) Danke trotzdem! Will das in Kürze als richtig bezeichnen. – fubbe

2

Der richtige Weg ist:

$arr = array('name' => 'value'); 

foreach($arr as $attributeName =>$value) { 
    $this->obj->{$attributeName} = $value; 
} 

echo $this->obj->name; 
+0

Warum die geschweiften Klammern {$ Attribut}? – fubbe

+0

Das ist die korrekte Art, Objektattribute dynamisch zu deklarieren. –

+1

Ich glaube nicht, dass das wahr ist, die geschweiften Klammern ermöglichen es Ihnen, einen Ausdruck auszuwerten, bevor Sie versuchen, darauf zuzugreifen. [Siehe PHP-Referenz] (http://php.net/manual/en/language.variables.variable.php) also -> $ item ['name'] und -> {$ item ['name']} sind funktional anders, aber -> $ item und -> {$ item} sind gleich, da es keine Mehrdeutigkeit gibt. – Waddles

Verwandte Themen