静态调用方法导致无法在被调用的类中引用$ this?

时间:2014-12-08 10:51:20

标签: php oop methods static-methods

我通常不会静态调用方法,但是自从使用Yii框架以来我已经开始更多了。

我遇到了一个我之前没有遇到的问题,我是从SignupForm班级做到的:

$send = mail::sendMail($email_data);

..在sendMail方法内显然位于mail类中,我有这一行:

$email_data['message'] = $this->sanitizeMsg($email_data['message']);

sanitizeMsgmail类的一种方法,因此我认为通过$this引用它的原因应该有效。

但是我收到了错误:

Calling unknown method: app\models\SignupForm::sanitizeMsg()

为什么要在SignupForm课程中寻找它?这与我静态调用有关吗?我是否需要恢复使用self::,还是应该停止静态调用?

1 个答案:

答案 0 :(得分:2)

使用$this仅适用于成员方法。即你只能从类的实例中使用它,我相信也只能访问实例成员。

要访问静态成员,您应该使用self::


不熟悉Yii框架,但有人做的是使用静态方法作为工厂方法。也许这就是你所困惑的。然后静态方法创建一个自己的新实例并返回它,在该实例中,您当然可以使用$this,但不能使用静态方法。静态方法没有$this