Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中始终获得父类的相同实例_Php_Oop - Fatal编程技术网

如何在php中始终获得父类的相同实例

如何在php中始终获得父类的相同实例,php,oop,Php,Oop,我的控制器类是主控制器类的子类。 如果我在另一个控制器中实例化一个控制器,那么主控制器将为调用的每个控制器再次实例化 我曾尝试创建一个静态实例,但我认为我做得不对 class Controller { private static $instance; public function __construct() { self::$instance =& $this; echo 1; } } class Hom

我的控制器类是主控制器类的子类。 如果我在另一个控制器中实例化一个控制器,那么主控制器将为调用的每个控制器再次实例化

我曾尝试创建一个静态实例,但我认为我做得不对

class Controller {
    private static $instance;

    public function __construct() {
            self::$instance =& $this;
            echo 1; 
     }
}

class HomeController extends Controller {
    public function index() {   
        $header = new HeaderController();
    }
}

class HeaderController extends Controller {
    public function index() {   
    }
}

$home = new HomeController();
我在父控制器中回显1,因此当我实例化主(子)控制器时,输出为11。因此,对于每个子控制器实例,会添加另一个1。我假设这意味着我会一次又一次地得到父控制器的新实例

这是一个低效/糟糕的方法吗?如果是,我如何始终获得相同的父控制器实例?

在某种程度上,您每次实例化扩展它的类时都会获得一个新的父控制器实例,因为子类的实例也是父类的实例,但是,在实例化子类的对象时,不会创建父控制器的另一个新实例

换句话说,
HomeController
HeaderController
都没有
控制器
,但它们都是
控制器
s


子类扩展父类。这意味着它继承了它的所有方法,包括构造函数,每次调用构造函数时,都会看到另一个1的输出。但这并不意味着创建了父控制器的另一个实例。

我没有编写任何php,但这似乎是singleton模式的一个例子。我建议添加codeigniter标签换句话说,不要惊慌这不是问题?是的,我不认为这是问题。我认为你看到的只是继承的正常行为,没有什么可担心的。