在php后端代码中,经常需要使用自定义魔术方法,魔术方法的调用,调用方式有两种:
1. 直接以函数的方式调用,
//返回一个 ActiveQuery 实例
$this->getImageFile()
2.以属性的方式调用
//返回一个对象数组或者空数组
$this->imageFile
例如:
//定义魔术方法以及同名变量
//与魔术方法同名的变量
public $imageFile;
//魔术方法
public function getImageFile(){
return $this->hasOne(UploadFile::className(), ['id' => 'image_file_id']);
}
//使用魔术方法
public function getImageUrl(){
if($this->imageFile){
return $this->imageFile->signUrl;
}
}
对于第一种方式调用不存在问题,但是第二种方式则存在问题。
若类中存在同名的变量,而又想通过以属性的方式调用魔术方法来实现相关功能时,程序无法调用魔术方法。
$this->imageFile
因为,变量的优先级高于魔术方法,在调用魔术方法时,实际上是调用了该类的一个变量,因此无法实现魔术方法的功能。