tp框架中构造函数__construct()与初始化函数_initialize()的区别
<?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(){
}
}
?>
输出“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(){
}
}
?>输出的结果为: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构造函数(这个上述代码没有,可以自己测试)。
转载于:https://www.cnblogs.com/xwzq/p/7523130.html
tp框架中构造函数__construct()与初始化函数_initialize()的区别相关推荐
- TP框架中内置查询IP函数
系统内置了get_client_ip方法用于获取客户端的IP地址,使用示例: $ip = get_client_ip(); 如果要支持IP定位功能,需要使用扩展类库Org\Net\IpLocation ...
- TP框架中S函数使用方法
TP框架中S函数使用步骤: //初始化 type为缓存方式;prefix为缓存前缀标示,也就是名字;expire为生存周期 //我这里设置缓存方式为xcache,名字ticket,周期7100秒 c ...
- TP框架中field查询字段
TP框架中field查询字段 不是fields 也不是files !!!! 不是fields 也不是files !!!! 不是fields 也不是files !!!! 不是fields 也不是file ...
- TP框架中ajax post请求时提示404
ajax post请求时提示404错误 TP框架中ajax post请求时提示404 找了半天是 控制器中方法有错误! 下次再遇到去控制器方法中找一步一步找,肯定能找到,我是单词拼错了! 转载于:ht ...
- tp框架中的一些疑点知识-5
关于vim中的缓存区的前后bp和bn的界定 通过命令ls可以看到 缓存区的 排序. 最开始打开的文件排在最上面, 序号最小. 那么它们就是 更 前 的缓冲区. 序号更前的用bp, 序号靠后的用bn. ...
- tp框架中引入php文件,Laravel框架及ThinkPHP框架超级简单的公共文件引入(保留变量)...
为什么要把两个框架放在一起来说呢?额...因为TP5.1.x与Laravel实在是太像了,本文主要讲述关于大家顶部及底部文件引入的问题. 但是如果顶部和尾部只是单纯的html代码还好说,但是里面通常有 ...
- 11月25日:tp框架中的架构,配置,路由,控制器
tp框架的主要内容 架构: https://static.kancloud.cn/manual/thinkphp5/118010 配置: 配置文件主要位置 可以使用Config::load()调用th ...
- SQLServer 2000中,存储过程和用户自定义函数具体的区别??
2019独角兽企业重金招聘Python工程师标准>>> 存储过程 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语 ...
- Pytest测试框架中,setup和teardown函数的作用及使用方法
作为一名Python开发人员,您一定知道Pytest是一个广泛使用的Python测试框架. 它具有易用性和灵活性,可以帮助您快速编写测试用例,并且能够支持包括单元测试.集成测试.功能测试等多种测试类型 ...
- TP框架中同时使用“or”和“and”
今天在tp中遇到一个问题,可能这并不算难的问题,但是我还是分享一下 以下是tp手册里面查询or的方式 $User = M("User"); // 实例化User对象 $where[ ...
最新文章
- 金融风控实战——Hive详解(数据读取、预处理、特征工程)
- (18)修改 PTE 实现挂物理页读写空指针
- 9、创建索引(CREATE INDEX)
- 【CF1311E】Construct the Binary Tree【增量构造】【复杂度证明】
- 死信队列和延迟队列_在实践中使用延迟队列
- vue基础4——自定义指令
- [转载] Python连接MySQL、Mongodb、SQLite
- 滤波电路对服务器的影响,滤波电路到底有什么作用?
- 个图标当十个用—多功能系统级图标制作攻略
- maven - 初识
- ghs文件可以删除吗_电脑C盘快满了,哪些文件可以直接删除掉?带你了解一下...
- Acer 4750 安装黑苹果_超详细安装黑苹果教程
- 【混合编程】c++中调用python脚本
- 1分钟激活任意Windows 系统
- 未来网络什么样?新华三是这么说的
- 热评云厂商:青云科技4.29亿元,重研发押注更大发展
- 计算机进安全模式启动修复,win7电脑故障怎么进入安全模式修复
- 转帖:励建书:数学有助于大众理性思维的培养
- JAVA 的性能优化
- vscode环境配置:附注有参考链接,便于下载软件。