使用Phalcon筛选器时获取未定义的变量


Getting undefined variable when using Phalcon filter?

我不清楚!运行以下代码时出现错误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");
    }
    }

我做了一个简单的测试并重现了这个问题。让我解释一下这里发生了什么。

  1. auth($name)Auth类的构造函数。是的,这是旧的构造函数样式。创建对象时会调用此方法。在创建对象之前不调用initialize(),因此在auth()方法之前不调用代码$this->filter = new Filter();

  2. 如果注释掉声明public $filter并访问构造函数中的属性,则从父类'Phalcon'Di'Injectable调用magic __get()方法,并从DI容器获取该属性。这就是为什么没有显示错误的原因。

  3. 如果指定属性public $filter并创建对象,则构造函数(auth()方法)将在initialize()方法之前调用,因此属性仅被定义而未初始化。在这种情况下,您会得到错误。

致命错误:在中的非对象上调用成员函数sance()/第19行上的var/www/app/models/Auth.php

如果你有任何问题,请告诉我。