_initialize() 区别 __construct()

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

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

Base.php:

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

Article.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://www.cnblogs.com/jongty/p/11653786.html

时间: 2024-11-09 08:25:10

_initialize() 区别 __construct()的相关文章

【TP3.2】详解_initialize() 和 __construct() 的区别和联系

1.假设 一个AdminController.class.php 集成至 \Think\Controller 类, 我们来看看Controller.class.php的构造方法源码: /** * 架构函数 取得模板对象实例 * @access public */ public function __construct() { Hook::listen('action_begin',$this->config); //实例化视图类 $this->view = Think::instance('T

ThinkPHP中_initialize()与__construct()用法

1 _initialize()不是php类中的构造函数,php类的构造函数只有__construct(). 2 类的初始化:子类如果有自己的构造函数__construct(),则调用自己的进行初始化,如果没有,则调用父类的构造函数进行自己的初始化 3 当子类和父类都有__construct()函数的时候,如果要在初始化子类的时候同时调用父类的__constrcut(),则可以在子类中使用parent::__construct(). 如果我们写两个类,如下  代码如下 复制代码 class Act

Bootstrap+Thinkphp3.2+Auth认证+jquery-validator后台

原文:Bootstrap+Thinkphp3.2+Auth认证+jquery-validator后台 Auth权限认证 本例采用auth权限认证,用户和用户组采用多对多关系处理,自动添加rule规则,带有jquery-validator插件,自动控制菜单显示或隐藏.   config.php中的配置 'AUTH_CONFIG'=>array( 'AUTH_ON' => true, //认证开关 'AUTH_TYPE' => 1, // 认证方式,1为时时认证:2为登录认证. 'AUTH_

20151228

1.window 对象该对象表示的是一个浏览器窗口.引用该对象的方法或属性时,不需要使用“window.xxx” 这种形式, 而是直接使用该对象的方法或属性. 该对象常见的属性如下所示.name:当前窗口的名称. states:表示浏览器窗口下方状态栏所显示的内容.通过对改属性发赋值,可以改变浏览器状态栏显示的内容. self:指浏览器窗口本身. history:浏览器历史访问对象.location:浏览器地址对象. document:文档对象. window 对象常见的方法如下所示.open(

ThinkPHP Model+数据库的切换使用

一.Model+数据库的切换使用 //也许用到了命名空间,举个例子 namespace Model\User; use \Think\Model; class User extends Model{ //继承tp的基类 } 方法一:使用ThinkPHP的初始化方法_initialize(); public function _initialize() { //设置数据库配置:运营后台库 $this->connection = C('MYDB'); } 方法二:使用PHP的初始化方法__const

__construct 与 ThinkPhp _initialize 的区别

一开始,不怎么了解这个东西,所以最近想到了就来研究一下这个东西. 首先,我就先说说php中的继承,__construct是类中的构造函数,用于实例化 1 <?php 2 class Action{ 3 public function __construct(){ 4 echo 'Action'; 5 } 6 } 7 8 class SonAction extends Action{ 9 public function __construct(){ 10 echo 'Son Action'; 11

ThinkPHP实现登录限制时__construct和_initialize的区别

ThinkPHP支持两种构造方法:  __construct和_initialize(ThinkPHP内置的构造方法). 测试URL为:  http://oa.com/index.php/Admin/User/add 修改用户控制器类文件UserController.class.php 如下: 1.__construct构造方法 修改中间控制器类CommonController.class.php 如下: 说明:empty() 5.5 版本之后支持表达式,否则会报如下错误: 运行结果如下: 中间

thinkphp5.1控制器初始化函数initialize与构造函数__construct区别

构造函数中子类的构造方法会覆盖父类的构造方法,如果要继承父类的构造方法可以加入parent::__construct(); 例子: //另一种方法,使用构造函数初始化 public function __construct(){ //使用父类的构造函数,也就是调用Controller类的构造函数 parent::__construct(); if(session('username')==null){ $this->error('请先登录','login/login'); } } initial

PHP中this,self,parent的区别

{一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能.利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意义的. PHP5经过重写后,对OOP的支持额有了很大的飞跃,成为了具备了大部分面向对象语言的特性的语言,比PHP4有了很多的面向对象的特性.这里我主要谈的是this,self,parent 三个关键字之间的区别.从字面上来理解,分别