2014-01-24 17 views
8

Ich habe eine Funktion, die Array lesen und Objekteigenschaften dynamisch festlegen sollte.PHP Set Objekteigenschaften dynamisch

class A { 
    public $a; 
    public $b; 

    function set($array){ 
     foreach ($array as $key => $value){ 
      if (property_exists ($this , $key)){ 
       $this->{$key} = $value; 
      } 
     } 
    } 
} 

$a = new A(); 
$val = Array("a" => "this should be set to property", "b" => "and this also"); 
$a->set($val); 

Nun, offensichtlich funktioniert es nicht, gibt es eine Möglichkeit, dies zu tun?

EDIT

Es scheint, dass nichts mit diesem Code falsch ist, sollte die Frage

geschlossen
+2

Klammern entfernen {} und funktioniert! -> '$ this -> $ key = $ value;' –

+0

Nun, das funktioniert offensichtlich ..., nur getestet auf PHP 5.4 – Dysosmus

+0

Gut segne meinen Bart! – Benedictus

Antwort

8

http://www.php.net/manual/en/reflectionproperty.setvalue.php

Sie Reflection verwenden können, denke ich.

<?php 

function set(array $array) { 
    $refl = new ReflectionClass($this); 

    foreach ($array as $propertyToSet => $value) { 
    $property = $refl->getProperty($propertyToSet); 

    if ($property instanceof ReflectionProperty) { 
     $property->setValue($this, $value); 
    } 
    } 
} 

$a = new A(); 

$a->set(
    array(
    'a' => 'foo', 
    'b' => 'bar' 
) 
); 

var_dump($a); 

Ausgänge:

object(A)[1] 
    public 'a' => string 'foo' (length=3) 
    public 'b' => string 'bar' (length=3) 
+0

können Sie, aber warum es verwenden, wenn einfache Setter tun wird – eis

+0

Beantwortet, weil etwas nützlich geschrieben – Benedictus

20

Sie brauchen nur Klammern entfernen {} und funktioniert! ->$this->$key = $value;