可能重複:
String with array structure to Array其他選項「EVAL」訪問多維數組時,對象內
我有工作作爲註冊一個靜態類,存儲一些相關設置變量。 由於它是靜態的,我不能在運行時添加/刪除屬性,所以在該類中我有一個通用對象(可以是數組),它存儲這些屬性。
這裏的代碼
class Settings
{
private static $setsObj;
public static function Set($key, $value)
{
self::$setsObj->$key = $value;
}
public static function Get($key)
{
if (strpos($key, '->') > 0)
{
$key = explode('->', $key);
$n = count($key);
$execute = 'return self::$setsObj->' . $key[0];
for ($i = 1; $i < $n; $i++)
{
$execute .= '["' . $key[$i] . '"]';
}
$execute .= ';';
eval($execute);
}
else
{
return self::$setsObj->$key;
}
}
}
現在,這使我得到一個確定的性質是這樣的:
Settings::Get('property_name');
如果說房地產是一個數組,我可以訪問陣列子項是這樣的:
Setting::Get('property_name->subitem');
我的問題是:
在這種情況下使用eval是否正確?有可能使這個工作不使用eval? 我可以更改爲單例模式類並直接向父對象添加屬性(某些信息是合理的,比如數據庫密碼)?