最近有些小伙伴问我出现的一个问题,在构造中对成员进行赋值的时候,出现赋不上值的情况,我看了一下他们的代码,额,看来是没理解一个概念。
即$this->$name
和$this->name有什么区别呢?
我们看一下__set魔术方法的一般写法:
public function __set($name, $value)
{
$this-> $name = $value ;
}
我看了一下小伙伴的构造中代码,如下:
protected $modelName = '' ;
public function __construct($modelName)
{
$this->$modelName = $modelName ;
}
这明显是有问题的
我们实例化的时候,假如我们调用:
$mode = new Model('Grade');
'Grade'会账值到 构造形参$modelName
然后我们
$this->$modelName 会变为
$this->Grade
这样肯定是无法赋值成功的。
所以要改为
protected $modelName = '' ;
public function __construct($modelName)
{
$this->modelName = $modelName ;
}
简单总结:
$this->$var = $value;
在$this->后面出现变量$var的时候,会把变量先转化成它真正的值再去执行
=$value的操作。
所以我们在构造为成员赋值时,一定不能在$this->后面的成员变量前边加$号
网友评论