2011-12-19 26 views
0

基本上我想訪問一個類的變量,但是我動態地改變了想要的變量的名字。我有一個問題,一點解釋完全是,但看到我的代碼,也許它變得更加清晰:使用var來描述一個類的var

$requirement = array('req1','req2'); 
foreach($requirements as $requirement) 
     { 
      // CHECK FOR REQUIRED PARAMETERS 
      if(!isset($this->$requirement)) { echo 'foo'; } 
     } 

所以其實我是想訪問$this->req1等等,但我怎麼跟我的iterator-訪問變量?我不確定這是否正確,難以找出答案。

另請參見:如何在相同情況下訪問父變量?

+1

試試'$ this - > {$ requirement}'。你的情況是什麼父母? – hakre 2011-12-19 22:57:47

+0

我的意思是一個擴展的父類。你用parent :: $ variable' – Anonymous 2011-12-19 23:01:31

+2

父屬性訪問的東西在子對象中是可用的(除非在父對象中定義爲私有,在這種情況下,你不應該從子對象訪問它們) – 2011-12-19 23:04:19

回答

4

$$(或使用魔法的getter/setter方法)

if(!isset($this->$$requirement)) { echo 'foo'; } 

if(!isset($this->{$requirement})) { echo 'foo'; } 
+0

應該這樣做!對父母來說,它是「parent :: $ {$ require}」嗎? – Anonymous 2011-12-19 23:03:34

+3

如果你正在擴展一個父類,那麼所有的非私有屬性都應該在該子類的實例中可用......所以不需要以任何不同的方式訪問這個模塊 – 2011-12-19 23:06:41

1

我會使用魔法的getter和setter,馬克說。像這樣:

<?php 

class MyClass 
{ 
    protected $data; 

    public function __get($key) 
    { 
     return $this->data[$key] 
    } 

    public function __set($key, $value) 
    { 
     $this->data[$key] = $value; 
    } 
} 

$var = 'adsdas'; 
$var2 = 'sadkajds'; 

$obj = new MyClass; 
$obj->$var = 1; 
$obj->$var2 = 1; 
+1

這就是我通常會去的方式,但是在我的情況下,使用起來有些複雜,所以我會和括號一起去,謝謝! – Anonymous 2011-12-19 23:07:52