我通常不会静态调用方法,但是自从使用Yii框架以来我已经开始更多了。
我遇到了一个我之前没有遇到的问题,我是从SignupForm
班级做到的:
$send = mail::sendMail($email_data);
..在sendMail
方法内显然位于mail
类中,我有这一行:
$email_data['message'] = $this->sanitizeMsg($email_data['message']);
sanitizeMsg
是mail
类的一种方法,因此我认为通过$this
引用它的原因应该有效。
但是我收到了错误:
Calling unknown method: app\models\SignupForm::sanitizeMsg()
为什么要在SignupForm
课程中寻找它?这与我静态调用有关吗?我是否需要恢复使用self::
,还是应该停止静态调用?
答案 0 :(得分:2)
使用$this
仅适用于成员方法。即你只能从类的实例中使用它,我相信也只能访问实例成员。
要访问静态成员,您应该使用self::
。
不熟悉Yii框架,但有人做的是使用静态方法作为工厂方法。也许这就是你所困惑的。然后静态方法创建一个自己的新实例并返回它,在该实例中,您当然可以使用$this
,但不能使用静态方法。静态方法没有$this
。