php - 如何始终在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。我认为这意味着我一遍又一遍地获得父控制器的新实例。
这是低效/坏的吗?如果是,我怎样才能始终获得父控制器的相同实例?
解决方案
在某种程度上,您每次实例化扩展它的类时都会获得父控制器的新实例,因为子类的实例也是父类的实例,但是父控制器的单独附加新实例是实例化子类的对象时未创建。
换句话说,HomeController
andHeaderController
并不是每个都有a Controller
,但它们都是 Controller
s。
子类扩展了父类。这意味着它继承了它的所有方法,包括构造函数,并且每次调用构造函数时,您都会看到另一个输出 1。但这并不意味着创建了另一个父控制器实例。
推荐阅读
- julia - 使用 JuliaDB 读取日期
- node.js - 在 koa 服务器中检查日志时,不会从浏览器(本地主机)发送 cookie
- reactjs - React useEffect 在组件安装和依赖项更改上运行
- java - $geoNear 查询花费大量时间返回结果
- testing - 在 testcafe 中手动设置 QUARANTINE_THRESHOLD 和 DISCONNECT_THRESHOLD 不起作用
- java - 如何导入 gradle 依赖项
- node.js - 在客户端使用来自服务器的发布请求的结果是否安全?
- flutter - 带有内容的滑动页脚颤动
- android - 如果 requestLocationUpdates() 参数 minTime 和 minDistance 都为 0 会发生什么
- jquery - 通过按钮单击jquery更改输入标签的值时触发更改事件