我不清楚!运行以下代码时出现错误Notice: Undefined variable: filter
!
但当我删除声明public $filter
行时,它成功了!!!为什么?
use Phalcon'Filter;
class Auth extends Component {
public $filter;//remove this line is working
public function initialize() {
$this->db = $this->getDI()->getShared("db");
$this->login_db = $this->getDI()->getShared("login_db");
$this->filter = new Filter();
}
public function auth($name) {
$name = $this->filter->sanitize($name,"string");
}
}
我做了一个简单的测试并重现了这个问题。让我解释一下这里发生了什么。
-
auth($name)
是Auth
类的构造函数。是的,这是旧的构造函数样式。创建对象时会调用此方法。在创建对象之前不调用initialize()
,因此在auth()
方法之前不调用代码$this->filter = new Filter();
。 -
如果注释掉声明
public $filter
并访问构造函数中的属性,则从父类'Phalcon'Di'Injectable
调用magic__get()
方法,并从DI容器获取该属性。这就是为什么没有显示错误的原因。 -
如果指定属性
public $filter
并创建对象,则构造函数(auth()
方法)将在initialize()
方法之前调用,因此属性仅被定义而未初始化。在这种情况下,您会得到错误。
致命错误:在中的非对象上调用成员函数sance()/第19行上的var/www/app/models/Auth.php
如果你有任何问题,请告诉我。