设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
CodeIgniter 开发
›
CodeIgniter 问答求助
›
CI的解构疑问
返回列表
查看:
2975
|
回复:
8
CI的解构疑问
[复制链接]
tmnh168
tmnh168
当前离线
积分
303
IP卡
狗仔卡
发表于 2009-7-1 13:37:26
|
显示全部楼层
|
阅读模式
CI中一个控制器的新类需要继承已有的controller类(废话)。
CI为了兼容php4,没有用PHP5中的__construct来解构。而是用了与类同名的方法来表示。
为了这点我理解,可是奇怪的是为何还要写 parent::Controller(); 继承了不就能用父类中的属性,
方法了么,既然已经继承了:Controller为何还要说parent::Controller();?例如下例。
PHP
复制代码
class
Upload
extends
Controller
{
//就像是说 我controller生的
function
Upload
(
)
{
parent
::
Controller
(
)
;
// 就像说我爹是controller。与第一句不重复么?
$this
->
load
->
helper
(
array
(
'form'
,
'url'
)
)
;
}
复制代码
国内的THINKPHP,I-F,QeePHP都没见parent::Controller();
问题问得很弱,见笑了。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
Hex
Hex
当前离线
积分
50179
IP卡
狗仔卡
发表于 2009-7-1 14:04:32
|
显示全部楼层
这是因为 PHP4 下子类不会自动调用父类的构造函数(PHP5 是不是也这样我忘了,呵呵)。
所以需要手动调用父类的构造函数,也就是 parent::Controller();
控制器父类的构造函数里有一些是必须执行的代码,你可以看一下控制器父类的源码,很简单的,呵呵。
回复
支持
反对
使用道具
举报
显身卡
tmnh168
tmnh168
当前离线
积分
303
IP卡
狗仔卡
楼主
|
发表于 2009-7-1 14:20:51
|
显示全部楼层
也就是parent是PHP4的父类如果有构造函数,在写继承类时候,才需要手动添加。如果父类仅仅有普通方法,就可以省去这这一步了。
个人感觉PHP5中是自动加载父类的__ controller了,但论坛有个翻译老外的教程中却还是用了parent.
CodeIgniter 分页教程(Pagination)
http://codeigniter.org.cn/forums/thread-17-1-2.html
中
PHP
复制代码
class
Books
extends
Controller
{
function
__construct
(
)
{
parent
::
Controller
(
)
;
$this
->
load
->
helper
(
'url'
)
;
$this
->
load
->
database
(
)
;
}
复制代码
类的构造函数 有如 框架的index.php,都是单入口,是用来预处理一些必须执行的代码的,例如初始化,加载库文件。是必须的东西,还是自动加载的好。
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50179
IP卡
狗仔卡
发表于 2009-7-1 14:28:22
|
显示全部楼层
根据 CI 的情况来说,不管是 PHP5 还是 PHP4 都需要执行 parent::Controller();
不执行的话可能会产生未知的错误,请根据手册来编写 CI 的代码,呵呵。
回复
支持
反对
使用道具
举报
显身卡
tmnh168
tmnh168
当前离线
积分
303
IP卡
狗仔卡
楼主
|
发表于 2009-7-1 14:32:43
|
显示全部楼层
谢谢热情的“十六进制”。
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50179
IP卡
狗仔卡
发表于 2009-7-1 14:44:32
|
显示全部楼层
谢谢热情的“十六进制”。
tmnh168 发表于 2009-7-1 14:32
回复
支持
反对
使用道具
举报
显身卡
tmnh168
tmnh168
当前离线
积分
303
IP卡
狗仔卡
楼主
|
发表于 2009-7-1 15:04:29
|
显示全部楼层
HEX意味十六进制,但也表示”不吉祥的东西“ ”邪恶“的意思。
PHP中十六进制用Ox表示,Ox又表示"牛"的意思。
综上,建议楼主改名。名字真的很重要。。。。。。。。
楼主可以
一下
说到CI的名字。
CI是舶来品,我们自然是无法为其易名,但对于国内用户来说,因为igniter这个单词真的很多人都不知道什么意思(我也是在背托福词汇时才遇到),对CI的普及不太有利。相比下zend,THINKPHP,QEEPHP容易记住。
话说回来名字不过一个符号,内容才是本质。
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50179
IP卡
狗仔卡
发表于 2009-7-1 15:08:55
|
显示全部楼层
哈哈,楼上说的很有趣,我一直都叫 Hex,就是取十六进制的意思,嘿嘿。
不过,CI 的名字无法改,貌似是有版权问题的。
回复
支持
反对
使用道具
举报
显身卡
visvoy
visvoy
当前离线
积分
1342
IP卡
狗仔卡
发表于 2009-7-1 19:48:43
|
显示全部楼层
controller的构造函数完成了CI的autoload功能,将默认的几个物件和config/autoload.php里面配置的创建,且映射到controller->xxx, 如果不用构造函数,那就要使用丑陋的外部调用过程完成autoload,rick大叔不喜欢啦,所以就整到构造函数里面了
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页