php框架

 首页 > php框架 > ThinkPHP > ThinkPHP __initialize()和类的构造函数__construct()剖析

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

分享到:
【字体:
导读:
          ThinkPHP中的__initialize()和类的构造函数__construct(),thinkphp中的__construct是不可以随便用的,因为你的模块类继承上级类,上级类有定义好的;1、__initialize()不是php类中的函数,php类的构造函数...

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

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

thinkphp中的__construct是不可以随便用的,因为你的模块类继承上级类,上级类有定义好的;

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

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

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

如果我们写两个类,如下:

  1. class Action{ 
  2.     public function __construct() 
  3.     { 
  4.         echo 'hello Action'
  5.     } 
  6. class IndexAction extends Action{ 
  7.     public function __construct() 
  8.     { 
  9.         echo 'hello IndexAction'
  10.     } 
  11. $test = new IndexAction; 
  12. //output --- hello IndexAction 

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

  1. class IndexAction extends Action{ 
  2.     public function __initialize() 
  3.     { 
  4.         echo 'hello IndexAction'
  5.     } 

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

  1. class IndexAction extends Action{ 
  2.     public function __construct() 
  3.     { 
  4.         parent::__construct(); 
  5.         echo 'hello IndexAction'
  6.     } 

这样就可以将两句话同时输出,当然还有一种办法就是在父类中调用子类的方法.

  1. class Action{ 
  2.     public function __construct() 
  3.     { 
  4.         if(method_exists($this,'hello')) 
  5.         { 
  6.             $this -> hello(); 
  7.         } 
  8.         echo 'hello Action'
  9.     } 
  10. class IndexAction extends Action{ 
  11.     public function hello() 
  12.     { 
  13.         echo 'hello IndexAction'
  14.     } 

这样也可以将两句话同时输出,而这里子类中的方法hello()就类似于ThinkPHP中__initialize()。

所以,ThinkPHP中的__initialize()的出现只是方便程序员在写子类的时候避免频繁的使用parent::__construct(),同时正确的调用框架内父类的构造器,所以,我们在ThnikPHP中初始化子类的时候要用__initialize(),而不用__construct(),当然你也可以通过修改框架将__initialize()函数修改为你喜欢的函数名.

分享到:
thinkphp+mysql实现的权限管理 - Thinkph...
thinkphp+mysql实现的权限管理 作为一个基于B/S的管理系统,什么用户能执行什么操作,确实是一个头大的问题,很有幸在组长的带领下,涉足了RBAC(Role-Based Access Control),肯定要Mark一下的,(以下内容需要thinkphp框架的相关知识) No.1 数据库的设计(只摘取相关部分) 用户表:记录用户信...
Thinkphp 中的 系统变量 - Thinkphp
Thinkphp 中的 系统变量 Action中使用的系统常量 THINK_PATH // ThinkPHP 系统目录 APP_PATH // 当前项目目录 APP_NAME // 当前项目名称 MODULE_NAME //当前模块名称 ACTION_NAME // 当前操作名称 TMPL_PATH // 项目模版目录 LIB_PATH // 项目类库目录 CACHE_PATH // 项目模版缓存目...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……