我正在构建一个类,并且最初想要重载构造,但发现这在PHP中是不允许的。我的解决方案是为一个构造函数使用变量参数。但是,我在key =>中使用字符串文字时遇到了一些问题。值对并分配类属性。这让我问我的主要问题 - 是否可以使用变量变量通过构造函数来分配类属性?
见下面的例子:
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时,不会返回任何内容。
我在这里缺少什么?无论如何使用带有字符串文字的数组来分配类属性?如果没有,用构造函数解决变量参数问题的好方法是什么?
答案 0 :(得分:1)
$this->name
正在寻找名为name
的媒体资源。变量属性写为:
$this->$name
请参阅{{3>}
上的PHP文档中的类属性也可以使用变量属性名访问。您的构造函数写错了。它遍历参数列表,期望它是一个关联数组。但是您将设置作为单个参数传递。所以它应该是:
function __construct($args) {
foreach ($args as $key => $value) {
$this->$key = $value;
}
$this->date = time();
}