• _initialize()方法是在任何方法执行之前,都要执行的,当然也包括 __construct构造函数。 也就是说如果存在_initialize()函数,调用对象的任何方法都会导致_initialize()函数的自动调用,而__construct()构造函数仅仅在创建对象的时候调用一次,跟其它方法调用没有关系。
  • __construct这里是双划线,而_initialize()函数是单划线
  • 如果父子类均有_initialize()函数,则子类覆盖了父类的,如果子类没有而父类有,则子类继承父类的。
  • 默认情况下,子类的构造函数不会自动调用父类的构造函数。在调用子类对象的_initialize()时,也不会导致自动调用父类的_initialize()
  • 实际编写子类的构造函数时,一般都要加上父类构造函数的主动调用parent::__construct(),否则会导致子类对象空指针的异常,如Call to a member function assign() on a non-object。

故在一些系统后台管理或者评论功能上,可使相关的控制器extends于base控制器:

Base.php:


<?php
namespace app\admin\controller;
use think\Controller;
class Base extends Controller
{
public function _initialize(){
if(!session('username')){
$this->error('请先登录系统!','Login/index');
}
}
}

Article.php


<?php
namespace app\Admin\controller;
use app\Admin\model\Article as ArticleModel;
use app\admin\controller\Base;
class Article extends Base
{
……… ………
}

这样一来,当Article控制器的任何方法执行前都会先执行Base.php中的_initialize()方法进行检测是否已经登录,无需创建对象。

原文地址:https://segmentfault.com/a/1190000016057697

最新文章

  1. Linux的学习笔记
  2. 使用echarts开发电子屏数据展示页面
  3. 【转载、推荐】不要自称是程序员,我十多年的 IT 职场总结
  4. Asp.net Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则 (多级路由) 如:Admin/Test/Index
  5. HeadFirst设计模式之装饰者模式
  6. Hibernate+struts+JqueryAjax+jSON实现无刷新三级联动
  7. HW4.28
  8. 需要熟悉的几个调试命令:objdump/pmap/ldd/stace
  9. SIP for android
  10. ci框架中输出sql语句
  11. JavaScript之实例
  12. Mahout canopy聚类
  13. DIV与SPAN之间有什么区别
  14. 忘记秘密利用python模拟登录暴力破解秘密
  15. Scrapy中集成selenium
  16. EBS WebADI 存储过程增加参数
  17. 001.Heartbeat简介
  18. Struct2.0学习笔记1
  19. 【Unity笔记】寻路导航用NavMeshObstacle做动态阻挡
  20. Windows7 64位中出现的KERNELBASE.dll错误的解决方法

热门文章

  1. Android离线语音识别(PocketSphinx)
  2. 500万url的es 批删除
  3. sed 之 模式空间 & 保持空间
  4. git 命令 —— checkout
  5. luogu 3383【模板】线性筛素数
  6. Mobile
  7. [转]linux tr命令详解
  8. C# Nugut CsvHelper 使用
  9. Jquery 《不想工作系列》--整理一下append、prependTo、after的区别
  10. sql 列集合转换成逗号分隔的字符类型