2015-11-26 145 views
2

我在这里绞尽脑汁。就在我认为我理解了某些东西的时候,我被证明是错误的。PHP静态变量构造

我的问题涉及使用静态方法,静态变量和__construct魔术方法。让我们来看看下面这个例子

<?php 

class DummyStatic 
{ 
    public static $variable; 

    public function __construct() 
    { 
     self::$variable = 'Dummy Text'; 
    } 

    public static function text() 
    { 
     return self::$variable; 
    } 

} 

$dummyText = DummyStatic::text(); 

?> 

我的假设是,当我把DummyStatic::text();它将返回Dummy Text下。

我正在另一个项目中使用MVC,其中类似这样的事情正在成功完成,但为什么它不能正常工作正在让我发疯。

有什么想法?

预先感谢您。

+0

不要在构造函数初始化静态变量。构造函数用于初始化新对象,应该可以在类上使用静态属性(不必调用任何构造函数)。 –

+0

@CarlGroner感谢您的评论。但我不明白你为什么说'不要在构造函数中初始化静态变量......'它似乎有时会非常有益。你能解释一下吗? – VIDesignz

+0

我想如果您不希望在创建类的对象之前获得该值,但是我无法想象出许多情况,那么这很有好处。即使你想让构造函数修改该值,一个明确的初始值也会更好。 –

回答

1

它不返回“虚拟文本”,因为构造函数从未执行过。构造函数仅在类的新实例上执行。

$foo = new DummyStatic(); 
echo DummyStatic::text(); 

这会,但是,打印出“虚拟文本”

+1

只需要我正确的简化答案。谢谢斯塔! – VIDesignz