2012-07-23 59 views
2

我有一個私有成員‘說明’一類,但該提議二傳手:PHP:如何使用動態變量名帶班二傳手

class Foo { 
    private $description; 

    public function setDescription($description) { 
    $this->description = $description; 
    } 
} 

我有成員的名字在一個變量。我想動態訪問該字段。如果該領域只是公開我可以這樣做:

$bar = "description"; 
$f = new Foo(); 
$f->$bar = "asdf"; 

但我不知道如何做的情況下,我只有一個setter。

+0

Look into Reflection;)http:// ph p.net/manual/en/reflectionproperty.setvalue.php - 編輯,實際上你是否可以不使用'$ f - > {$ bar} =「asdf」;'? – Gavin 2012-07-23 12:42:42

回答

6
<?php 
$bar = "description"; 
$f = new Foo(); 
$func="set"+ucwords($bar); 
$f->$func("asdf"); 
?> 
+0

非常感謝。這實際上很簡單,但我不敢這麼做(我習慣C++):) – Barth 2012-07-23 12:45:35

0

使用魔法二傳手

class Foo { 
    private $description; 

    function __set($name,$value) 
    { 
    $this->$name = $value; 
    } 
/*public function setDescription($description) { 
    $this->description = $description; 
    }*/ 
} 

但這樣一來,如果你想它只是說明使用該

class Foo { 
     private $description; 

     function __set($name,$value) 
     { 
     if($name == 'description') 
     { $this->$name = $value; 
      return true; 
     } 
     else 
     return false 
     } 
    /*public function setDescription($description) { 
     $this->description = $description; 
     }*/ 
    } 
+0

好吧,但爲什麼不把它們公開呢?對不起,這可能是一個新手問題。 – Barth 2012-07-23 12:47:41

+0

@Barth不像你想象的那麼花哨:) – 2012-07-23 12:53:03

1

試試這個你所有的私有財產將作爲公立:

$bar = 'description'; 
$f = new Foo(); 
$f->{'set'.ucwords($bar)}('test');