Instance as a static class property
是否可以在PHP中将类的实例声明为属性?
基本上我想要达到的是:
1 2 3 4 | abstract class ClassA() { static $property = new ClassB(); } |
嗯,我知道我不能这样做,但是除了总是这样做之外,还有什么解决办法吗:
1 |
您可以使用类似singleton的实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php class ClassA { private static $instance; public static function getInstance() { if (!isset(self::$instance)) { self::$instance = new ClassB(); } return self::$instance; } } ?> |
然后,您可以使用以下命令引用该实例:
1 | ClassA::getInstance()->someClassBMethod(); |
另一种解决方案,静态构造函数,是
1 2 3 4 5 6 7 8 | <?php abstract class ClassA { static $property; public static function init() { self::$property = new ClassB(); } } ClassA::init(); ?> |
请注意,类不必是抽象的,这样就可以工作了。
另请参阅如何初始化静态变量和https://stackoverflow.com/a/3313137/118153。