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


Statically calling methods causes not being able to reference $this within called class?

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

遇到了一个以前从未遇到过的问题,我正在SignupForm课堂上执行此操作:

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

..在显然在mail类中的sendMail方法中,我有以下行:

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

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

但是我收到错误:

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

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

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

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


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