PHP中的静态初始化程序或静态构造函数?

3
我一直在寻找PHP中是否存在类似于静态初始化器的东西。
以下是Java示例中的静态方法:
public class Foo {
    static {  //This is what I mean (Does this exist in other languages like PHP?
       //THIS IN PHP
    }
}

我找到了它的名称(静态初始化程序)。它在加载类的第一次使用时使用。似乎在PHP中没有静态初始化程序。


4
在PHP中有静态方法,但这不是Java。PHP中没有静态"块",方法和类属性(也称为类变量)可以是静态的,但不能是代码块。类中不能包含裸代码。 - Marc B
那些不是静态方法,而是静态变量... - Smar
@MarcB,你应该把你的评论变成一个答案,因为那就是它的意义。 - Henrique Barcelos
2个回答

2

我认为PHP没有像Java或C#一样直接初始化类的方法。如果要初始化静态类成员,可以在构造函数中进行操作,例如:

class MyClass {

    private static $staticValue;

    public function __construct() {
        if (self::$staticValue === null){
            self::$staticValue = 'Nice';
        }
    }
}

然而,如果您从未实例化过您的类,则上述方法将无法起作用。这意味着访问静态类成员不会触发__construct中的代码,很遗憾,在PHP中没有解决此问题的方法。


1
没错,我最终决定使用以下代码:public static function init(){ Class::Foo = new Foo(); }这就是我的做法,唯一的问题是需要调用init()函数。不过没关系,谢谢! - No One

-1

PHP中的静态属性和方法

class SomeClass {
    private static $property = 'Foo';

    public static function getProperty() {
        return self::$property;
    }
}

SomeClass::getProperty();

非静态属性和方法

class SomeClass {
    private $property = 'Foo';

    public function getProperty() {
        return $this->property;
    }
}

$class = new SomeClass();
$class->getProperty();

1
这不是一个“静态块”(初始化程序),它只是一个带有“静态”关键字的方法。 - Yousha Aleayoub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接