【问题标题】:Access a class field from static method从静态方法访问类字段
【发布时间】:2012-07-11 05:54:17
【问题描述】:

例如,我有一个班级

class MyClass
{
    public $something = 'base';

    public function __construct()
    {
        $something = 'construct';
    }

    public function __destruct()
    {
        $something = 'destruct';
    }

    public static doSomething()
    {
        $return = new MyClass;
        echo $return->something;
    }
}

所以,我的问题是……在不实例化对象的情况下运行静态方法会运行构造函数吗?例如,如果我在构造函数中有数据库连接信息,我是否可以运行一个静态方法来返回一个查询并显式实例化该类?

提前致谢

【问题讨论】:

    标签: php oop static-methods


    【解决方案1】:

    是的,将在您的示例中调用构造。既然你已经有了代码,我想应该很容易测试。

    【讨论】:

      【解决方案2】:

      如果你执行 MyClass::doSomething(),它会创建 MyClass 的对象,当然,它的构造函数也会被调用。为什么不运行它并查看结果?

      【讨论】:

        【解决方案3】:

        我缺乏 PHP 知识,但与其他 OO 语言相比,它当然会运行构造函数,因为您告诉静态方法创建 MyClass 的新实例。

        如果您调用了新的 SomeOtherType,这同样适用。代码本身并不关心它是否在静态/公共/私有方法中,只要有 new ,就会调用构造函数。

        【讨论】:

          【解决方案4】:

          我没有问对问题,但答案是只要实例化对象,即使在静态方法中,构造函数也会运行。输出将是构造函数中的任何内容,因为解构函数直到最后一次调用类之后才会触发。

          对于问题中的困惑,我们深表歉意。

          【讨论】:

            猜你喜欢
            • 2015-03-19
            • 1970-01-01
            • 2011-07-31
            • 2016-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多