首页 > 解决方案 > 如何始终在php中获取相同的父类实例

问题描述

我有控制器类,它们是主控制器类的子类。如果我在另一个控制器中实例化一个控制器,则主控制器会为每个调用的控制器再次实例化。

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

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。我认为这意味着我一遍又一遍地获得父控制器的新实例。

这是低效/坏的吗?如果是,我怎样才能始终获得父控制器的相同实例?

标签: phpoop

解决方案


在某种程度上,您每次实例化扩展它的类时都会获得父控制器的新实例,因为子类的实例也是父类的实例,但是父控制器的单独附加新实例是实例化子类的对象时未创建。

换句话说,HomeControllerandHeaderController并不是每个都有a Controller,但它们都是 Controllers。

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


推荐阅读