为什么Yii2 框架要在控制器里面 init方法取代__construct构造方法?

发布于 2022-09-01 21:06:50 字数 116 浏览 13 评论 0

为什么Yii2 框架要在控制器里面 init方法取代__construct构造方法?
thinkphp里面也是如此,控制器里面用 __init**方法取代了__construct?
有哪些必要性和好处呢??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

橘味果▽酱 2022-09-08 21:06:50

因为控制器的基类需要__constuct()方法做一些初始化的工作(比如初始化模板引擎),如果你在控制器里实现了__construct,你还需要在__construct里调用parent::__construct()就太麻烦了。
所以通常会在基类里定义一个空的init方法,并且在__construct里(通常是末尾)调用$this->init(),这样开发的时候就只需要实现init方法

帅气尐潴 2022-09-08 21:06:50

我刚才在yii2 2.0.6版本里面,__construct方法里面不能使用

Url::toRout('index/index')

因为控制器在构造方法执行完毕后才会注册。
你只能在前置操作里面操作,也就是你所谓的__ini*()方法。
也就是说,前置方法能得到一个系统级初始化完毕后的系统,构造方法不是。
前置方法并没有取代构造方法
构造方法总是会执行,前置方法在内部调用时候不会执行,只对访问控制器有效。

孤星 2022-09-08 21:06:50

同意leo说的,比如你的类继承基类 想在构造方法中额外增加点操作,这时你如果重写构造方法并调用父类的构造方法,想想是不是很麻烦,要找到父类的构造方法,把参数列表整个复制过来,而如果只是覆盖init方法,这样就便利多了,这是一种很优秀的设计思路,自己的代码以后也可以多用这种方法

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文