【问题标题】:Statically calling methods causes not being able to reference $this within called class?静态调用方法导致无法在被调用类中引用 $this?
【发布时间】:2014-12-08 10:51:19
【问题描述】:

我通常不会静态调用方法,但自从使用 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:: 还是应该停止静态调用它?

【问题讨论】:

    标签: php oop methods static-methods


    【解决方案1】:

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

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


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

    【讨论】:

    • 嗯好的。所以基本上没有$this 用于methodsproperties,除非您通过$foo = new bar(); 创建实例?
    • @Brett 正确。 $this只适用于实例,所以如果没有实例,就没有$this
    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 2011-05-15
    • 1970-01-01
    • 2018-01-27
    • 2011-01-13
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多