2011-11-15 104 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