php tp写构造函数,详细介绍ThinkPHP中类的构造函数_construct()与_initialize()的区别
这篇文章主要介绍了ThinkPHP中类的构造函数_construct()与_initialize()的区别,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
前言
相信熟悉THINKPHP的phper基本上都很熟悉_initialize()这个方法,我们似乎也很少去使用_construct(),除非自己写插件,否则还真是很少用到。
今天查看代码突然看到_construct()这个php自带的构造方法,我的第一感觉是比较陌生,虽然之前学习java时经常遇到,但是很久不用基本忘记。我平时的习惯是将知识的重点写
在我那本小笔记上,但是很久不写字,曾经高中那个那种飘逸灵动的书写笔法彻底丢到异次元。再加上之前的想法,所以就来学习学习技术大牛们写写博客,这不是为了装逼,而只是让自己工作成果的点点滴滴都能不随时间流逝而消散。下面来看看详细的介绍吧。
先贴上代码(我的环境是wamp,使用了TP框架):
创建的FatherAction.class.php文件<?php
class FatherAction extends Action{
public function construct(){
echo 'father';
}
}
?>
创建的SonAction.class.php文件<?php
class SonAction extends FatherAction{
public function construct(){
echo 'son';
}
function index(){
}
}
?>
运行子类SonAction里的index()可以看到输出的结果:son
如果将子类改为:<?php
class SonAction extends FatherAction{
public function construct(){
parent::construct();
echo 'son';
}
function index(){
}
}
?>
运行结果为;fatherson
上面的结果可以得出结论:
在执行子类的构造函数时并不会自动调用父类的构造函数,如果你要调用的话,那么要加上parent::construct()
当我们把上述的构造方法改为THINKPHP_initialize()方法时运行会发现:结果与前面的一致,若要执行父类的_initialize()方法,也需要使用这一句:parent::_initialize()
那是不是说明php自带的构造函数construct()与THINKPHP的_initialize()方法一样的呢?
先贴上两段代码:<?php
class FatherAction extends Action{
public function construct(){
echo 'father';
}
}
?><?php
class SonAction extends FatherAction{
public function _initialize(){
echo 'son';
}
function index(){
}
}
?>
当执行子类SonAction的index方法时发现,输出的结果为:father
即子类调用了父类的构造函数,而没有调用子类的_initialize()方法
再贴上两段代码:<?php
class FatherAction extends Action{
public function construct(){
if(method_exists($this,"hello")){
$this->hello();
}
echo 'father';
}
}
?><?php
class SonAction extends FatherAction{
public function _initialize(){
echo 'son';
}
function index(){
}
function hello(){
echo 'hello';
}
}
?>
执行子类SonAction的index方法,发现输入的结果为hellofather
由此可以得出结论:
当THINKPHP的父类有构造函数而子类没有时,THINKPHP不会去执行子类的_initialize();
当THINKPHP的父类子类均有构造函数时,要调用父类的构造函数必须使用parent::construct()----------------- _initialize()同理;
当THINKPHP的子类同时存在construct构造函数和_initialize()方法,只会执行子类的construct构造函数(这个本人亲测,上述代码没有)。
总结
php tp写构造函数,详细介绍ThinkPHP中类的构造函数_construct()与_initialize()的区别相关推荐
- 详细介绍VO(值对象)和PO(持久对象)的区别
VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成.从结构上看,它们并没有什么不同的地方.但从其意义和本质上来 ...
- initialize php,关于_initialize()的详细介绍
这篇文章主要介绍了ThinkPHP中类的构造函数_construct()与_initialize()的区别,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧.前言相信熟悉 ...
- c语言%.6s和%6s的差别,6s和6的区别有哪些 各方面详细介绍【图文】
苹果 手机大家都听说过吧,它现在是很多年轻人追捧的对象,尤其是对于女性朋友来说,苹果手机是美国的一个手机品牌.在大陆市场非常受欢迎,它的价格虽然高,但是它的销量非常高,目前最为流行的款式就是苹果6S了 ...
- ThinkPHP使用分组详细介绍(十七)
原文:ThinkPHP使用分组详细介绍(十七) 使用分组(模块分组) *就是将多个项目合并到一个项目/应用去(就是Home.Admin) ---分组不分组看自己的建立项目习惯,个人习惯用根目录配置生成 ...
- 【2022年华为杯数学建模E题赛后总结加思路详细介绍配代码----10月11号写的总结】
提示:下文将介绍2022年华为杯数学建模E题赛后总结加思路详细介绍配代码 傻逼队友,傻逼队友,傻逼队友一定要看好人在进行组队,这是劝告. 这里有几点总结进行描述: 第一,图一定要尽量多,对图的解释要多 ...
- JAVA中JVM的重排序详细介绍(写得很明白)
刚刚在研究volatile变量的时候,涉及到重排序的概念,于是发现了这篇很好的文章,写得很简短很明白.所以转载一下. 原文地址:JAVA中JVM的重排序详细介绍 原文贴出来: 重排序通常是编译器或运行 ...
- xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证
xilinx Vivado的使用详细介绍(2):创建工程.添加文件.综合.实现.管脚约束.产生比特流文件.烧写程序.硬件验证 Author:zhangxianhe 新建工程 打开Vivado软件,直接 ...
- 详细介绍如何从0开始写一个数据通信,将数据从单片机发送到上位机(或者虚拟示波器)进行数据或图像显示,以及常见问题或注意事项解答,本文主要以匿名上位机为例,适合新手和小白
本文主要内容:详细介绍如何从0开始写一个数据通信,将数据从单片机发送到上位机(或者虚拟示波器)进行数据或图像显示,帮助我们调节一些参数,比如电机PID的调节.波形融合等,以及在我们写通信协议的时候 ...
- python中类的详细介绍及使用
python中类的详细介绍及使用 前面我们介绍了类的创建及面向对象的三大特性.本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 一.类的成员 类的成员包括:属性和方法. 属性可以分为: ...
最新文章
- Py之openpyxl:openpyxl库的简介、安装、使用方法之详细攻略
- Jenkins拾遗--第三篇(用户权限管理)
- UITabBarController 和 UINavigationController 的详解
- 简单高效地控制高亮度LED
- Windows核心编程MFC_gdi+发光字
- bzoj2146 Construct
- fullgc多久一次正常_多久排便一次算正常?提醒:出现3种情况,可能是胃肠“生病”了...
- 笨猪猪:“暹粒游记”(上)
- 扫雷游戏网页版_佛性扫雷 炸不炸随缘
- 通过云主机实现双十一淘宝,京东秒杀 之一
- 陈述句c语言,幼儿语言发展中最早产生的句型是()。A.陈述句 B.疑问句C.祈使句 D.感叹句...
- cmsplus实战之仿[我扫网]之四:安装整站下载器并下载仿站所有数据
- php模拟IP请求,如何在php中利用curl对ip进行模拟
- 运动耳机品牌排行榜有哪些,排行前五的运动耳机推荐
- Unity各类数据库的基本操作(三)-- JSON
- Unity 颜色板|调色板|无级变色功能
- ThingsBoard教程(十九):规则节点概览介绍
- 关于查看虚拟机防火墙 状态和关闭防火墙(CentOS7)
- vr性能测试软件,SteamVR性能测试工具
- 内部干货 | 阿里CEO逍遥子:学会“用人做事”,而不是“做事用人”...