如何在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标签换句话说,不要惊慌这不是问题?是的,我不认为这是问题。我认为你看到的只是继承的正常行为,没有什么可担心的。