重複の可能性:
配列構造を持つ文字列から配列へ
レジストリとして機能する静的クラスがあり、いくつかの関連する設定変数を格納しています。静的であるため、実行時にプロパティを追加/削除することはできません。そのため、そのクラス内に、それらのプロパティを格納する汎用オブジェクト(配列にすることができます)があります。
これがコードです
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を使用せずにこれを機能させることは可能ですか?シングルトンパターンクラスに変更して、プロパティを親オブジェクトに直接追加しますか(DBパスワードなど、一部の情報は適切です)。