簡體   English   中英

在PHP中動態地從數組類屬性獲取項目的值

[英]Get value of item from array class property dynamically in PHP

我有一個名為Model的對象,如下所示:

class Model {
    public $menu;
}

在一個函數中,我實例化一個新模型,如下所示:

public function Hello(){
    $model = new Model();
    $model->menu['home'] = 'Hi there';
}


在我的計划中,我有一個Model類,可以包含多個屬性。 我希望這些屬性能夠在我的視圖中顯示(html文件)。 <!-- $model.{PropertyName} -->元素被Model類中可用的屬性值替換。 在這種特定情況下,我有一個屬性$menu ,它是一個如上所示的array


現在,我有一段代碼提取一個字符串值,其中該字符串的結果是menu['home'] 通過這個字符串,我嘗試讀取模型的屬性menu

所以:

 private function Action($model){ $foo = "menu['home']"; //Get value of $foo $value = $model->$foo; } 

我期望得到“嗨,那里”,但我得到一個通知: Notice: Undefined property: Model::$menu['home'] in ....script.php on line X

當我直接訪問該屬性時,它將起作用!

知道如何獲取數組項的價值嗎?

您的$model實例沒有名稱為menu['home']的成員,因此您無法真正通過這種方式訪問​​它。 您在這里有幾種選擇:

選項1-拆分字符串並使用兩個變量:

$foo = "menu";
$bar = "home";

//Get value of $foo[$bar]
$value = $model->{$foo}[$bar];

如果您沒有兩個不同變量的值,也可以使用php代碼進行拆分。

選項2-使用評估(我真的建議反對!)

$foo = "menu['home']";

//Get value of $foo

die('ARE YOU SURE YOU REALLY WANT THIS?!?!?!');

$value = eval('return $model->'.$foo.';');
var_dump($value);

請注意,在不需要時使用eval確實不是一個好習慣!!! 並使您的代碼易受攻擊

要解決此問題,您需要一個稱為“變量變量”的PHP機制(請參閱http://php.net/manual/en/language.variables.variable.php )以獲取更多信息。

就您而言,可以通過以下方式訪問變量: $value = $model->${$foo};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM