我正在構建一個類,最初想重載構造,但發現這在PHP中是不允許的。我的解決方案是使用一個構造函數的可變參數。但是,我有一些問題在鍵=值對中使用字符串文字並分配類屬性。這導致我問我的主要問題 - 是否可以通過構造函數使用變量來分配類屬性?是否可以使用變量變量來動態分配類屬性,以便允許PHP中具有可變參數的類構造函數?
見下面的例子:
class funrun{
protected $run_id;
protected $fun_id;
protected $funrun_title;
protected $date;
function __construct(){
if (func_num_args() > 0){
$args = func_get_args(0);
foreach($args as $key => $value){
$this->$key = $value;
}
$this->date = date();
function __get($name){
return $this->name;
}
function __set($name,$value){
$this->name = $value;
}
}
這似乎正確分配的值。但後來,當我做到以下幾點:
$settings = array ('run_id' => 5, 'fun_id' => 3);
$fun_example = new funrun($settings);
echo $fun_example->run_id;
我得到一個錯誤的getter方法不能正常工作:
Undefined property: funrun::$name
然而,當我的類碼開關被$ this->鍵,類屬性似乎根本沒有分配。當我做$ fun_example - > $ run_id時,不會返回任何內容。
我在這裏錯過了什麼?反正有用字符串文字分配類屬性的數組嗎?如果不是,用構造函數解決可變參數問題的好方法是什麼?
你爲什麼聲明爲保護所有的屬性,然後提供魔術方法,使您能夠訪問它們,好像他們是公衆?爲什麼不直接宣佈它們是公開的呢? – Barmar