ThinkPHP中_initialize()与__construct()用法

1 _initialize()不是php类中的构造函数,php类的构造函数只有__construct().

2 类的初始化:子类如果有自己的构造函数__construct(),则调用自己的进行初始化,如果没有,
则调用父类的构造函数进行自己的初始化

3 当子类和父类都有__construct()函数的时候,如果要在初始化子类的时候同时调用父类的__constrcut(),
则可以在子类中使用parent::__construct().

如果我们写两个类,如下

 代码如下 复制代码

class Action {
   public function __construct(){
       echo ‘hello Action‘;
   }
}

class IndexAcion extends Action {
   public function __construct(){
       echo ‘hello,IndexAction‘;
   }
}

$test = new IndexAcion();
output --- hello IndexAction

很明显初始化子类IndexAction的时候会调用自己的构造函数,所以输出是‘hello IndexAction‘
但是将子类修改为

 代码如下 复制代码
class IndexAcion extends Action {
   public function _initialize(){
       echo ‘hello IndexAction‘;
   }
}

那么输出的是‘hello Action‘,因为子类IndexAction没有自己的构造函数
如果我想在初始化子类的时候,同时调用父类的构造器呢?

 代码如下 复制代码

class IndexAcion extends Action {
   public function __construct(){
       parent::__construct();
       echo ‘hello IndexAction‘;
   }
}
   
这样就可以将两句话同时输出
当然还有一种办法就是在父类中调用子类的方法

class Action {
   public function __construct(){
       if(method_exists($this,‘hello‘)){
           $this->hello();
       }
       echo ‘hello Action‘;
   }
}

class IndexAcion extends Action {
   public function hello(){
       echo ‘hello IndexAction‘;
   }
}

这样也可以将两句话同时输出
而这里子类中的方法hello()就类似于ThinkPHP中_initialize()
所以,ThinkPHP中的_initialize()的出现只是方便程序员在写子类的时候避免频繁的使用parent::__construct()
同时正确的调用框架内父类的构造函数,所以,我们在ThnikPHP中初始化子类的时候要用_initialize(),而不用__construct(),
当然你也可以通过修改框架将_initialize()函数修改为你喜欢的函数

时间: 2024-11-08 08:29:02

ThinkPHP中_initialize()与__construct()用法的相关文章

经验积累thinkphp中的include的用法,还有数据库中的汉字存入变成????的问题

在新公司上班第二天,总结一些在做项目时遇到的问题,大大小小的问题我都会总结出来,一些实用性强的代码和用法我也会公布出来. 现在先总结两个小问题,待会回家有时间再发点干货. 显示thinkphp中的include的用法,其实很简单,就是所有tpl下的模板文件,都相当于是和入口文件同级. 也就是说想包含tpl/default/left.html 就写成<?php include './app/Tpl/default/left.html'?> 其中的app是项目名称,你的名称是什么就该什么. 数据库

thinkPHP中_initialize方法实例分析

子类的_initialize方法自动调用父类的_initialize方法. 而php的构造函数construct,如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct(); parent::_initialize() 是调用父类的_initialize方法,如果你的父类_initialize函数没有任何内容,不需要写parent::_initialize() <?php class BaseAction extends Action { // 继承Thinkph

ThinkPHP中的__initialize()和类的构造函数__construct()

ThinkPHP中的__initialize()和类的构造函数__construct()网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下.将结果和大家分享.不对请更正.首先,我要说的是1.__initialize()不是php类中的函数,php类的构造函数只有__construct().2.类的初始化:子类如果有自己的构造函数(__construct()),则调用自己的进行初始化,如果没有,则调用父类的构造函数进行自己的初始化.3.当子类和父类都有__co

thinkphp中I(&quot;parm&quot;)用法的注意事项

php中用来传输的方式有两种$_GET 和 $_POST, thinkphp 提供了一种兼容两中传输方式的做法I(“param”) 但是请注意:在使用php中的函数时需要传入参数时不能用I(“parm”),必须使用采用的传输方式$_GET 或 $_POST传入,否则出错 thinkphp中I("parm")用法的注意事项,布布扣,bubuko.com

ThinkPHP中Session用法详解

在ThinkPHP封装了Session类,用户可以直接使用,常用的方法有: Session::set(name, value):注册 session . Session::is_set(name):检查Session的值是否设置. Session::get(name):读取 session . Session::clear():清空Session. Session::destroy():销毁 session . ThinkPHP 默认开启了 session 会话,因此在使用 Session 类之

thinkphp中join用法

JOIN方法也是连贯操作方法之一,用于根据两个或多个表中的列之间的关系,从这些表中查询数据. 附上项目中的left join用法的代码: 1 $data = M("groups g") 2 ->field('g.id,g.group_name,e.uid') 3 ->join('left join equipment e ON g.group_name = e.group_name') 4 ->where(array('g.user_id' => '1')) 5

ThinkPHP中initialize和construct的不同

本文转载自:http://www.kuitao8.com/20140819/2953.shtml ThinkPHP中initialize()和construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢? 在网上搜索,很多答案是两者是一样的,ThinkPHP中initialize相当于php的construct,这么说是错误的,如果这样,tp为什么不用construct,而要自己弄一个ThinkPHP版的initialize构造函

thinkphp中URL传参数的几种方式

在thinkphp中,url传参合asp.net中原理类似,下面就单个参数和多个参数传递方式进行一个简单讲解 1.传单个参数 单个参数这种比较简单,例如 想像edit操作里面传递一个id值,如下写法__URL__/edit/id/1 http://localhost/index.php/user/edit/id/1 id和其值1要分别位于/后面 后台获取id通过    $id=$_GET['id']   即可获取其具体值. 2.传多个参数 传多个参数相对比较麻烦一点,可以通过两种方式 第一种:传

[转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法.通俗一点说:M实例化参数是数据库的表名.D实例化的是你自己在Model文件夹下面建立的模型文件 例如:$user = new UserModel(); 等价于$user = D('user'); 如果实例化的是一个空模型 例如 $Demo = new Model(); 那么它等价于