访问“单例”类 PHP 的属性


Access property of 'singleton' class PHP

我不确定我使用的技术是否合适。我有一个类,单例,有一个这样的子实例:

final class Singleton {
    public $subinstance;
    private static $instance = NULL;
    private function __construct() {
        $this->subinstance = new subinstance(); 
    }
   public static function getInstance() {
       if (NULL === self::$instance) {
           self::$instance = new self;
       }
   return self::$instance;
   }
   private function __clone() {}
}

现在,如果我想从另一个类中的类外部访问子实例,我会这样做:

$s = singleton::getInstance();
$s->subinstance->....

这是正确的方法吗?当我执行$s=singleton::getInstance();时会发生什么,整个单例类是复制到$s中,还是更像是一个指针?

你正在做的很好,尽管在你的示例代码中,我假设你打算写:

$s = Singleton::getInstance(); // with the S capitalized

调用 getInstance 方法时,该类正在查看自身的某个版本是否已实例化。 如果有,它将返回对该实例的引用,而不是创建一个全新的实例。 如果尚未创建实例,它将创建实例,然后返回对它的引用。

我不确定为什么 sixeightzero 说你不应该在实例的构造函数中实例化一个类。 这样做时应该不会遇到任何问题。

如果你做$a = singleton,$a将是对singleton类的引用。$a的任何更改都将反映在单例访问中::等。(指针)

为什么要在构造函数中执行子实例?这可能会导致问题,并且应创建一个方法来处理受保护方法中的构造函数外部的子实例。您的子实例是什么样的?