2011-11-15 65 views
2

见:如何通过使用变量来访问动态属性?

$class_members = get_class_vars(__CLASS__); 

foreach($class_members as $key => $value) 
{ 
    if (strpos($key, '_output') === 0) 
    { 
     // I want to eval() this 
     $code = '$this->' . $key . ' = 0;'; 
    } 
} 

假设我要赋值0所有类成员与_output开始。我打算使用eval好主意吗?

+1

eval()从来就不是一个好主意。而且......你是否想通过类方法来做到这一点?或从物体外的某个地方?如果你在里面,你为什么需要eval? $这已经存在了。 –

+7

为什么不只是'$ this - > $ key = 0;' – acm

+0

我认为这个函数应该命名为'evil()',这样人们才会明白它的确如此:D – Petruza

回答

14

你不需要eval()这个。您可以使用一个变量作为$this->{$key}

foreach($class_members as $key => $value) 
{ 
    if (strpos($key, '_output') === 0) 
    { 
     // Look mom, no eval()! 
     $this->{$key} = 0; 
    } 
} 
+0

'$ this - > $ key'没有大括号也适用。尽管大括号确实提高了可读性。 – Petruza

13

你可以这样做:

$this->{$key} = 0; 

只有其中eval没有考虑evil少数情况下。

而这不是其中之一:)

+5

我能想到的唯一情况是// // eval(“”);':D – Petruza