博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 单一入口框架设计简析
阅读量:6858 次
发布时间:2019-06-26

本文共 1262 字,大约阅读时间需要 4 分钟。

2013年1月22日 19:35:25

大概过程:所有URL请求->重定向到index.php->加载一个类A->分析URL得到参数信息和将要调用的另一个类B->加载这个类B,并将参数信息传递给该类->执行->结束.

入口文件(通过.htaccess文件中的rewrite功能把所有请求都转向这个文件):

test.php
run();exit;

主要入口处理类(相当于zend framework的front,用于处理和分发请求): 

a.php
action(); } public function __destruct() { var_dump('A 析构函数'); }}

功能类,处理分发来的请求(超级类将URL分解获得信息,动态new此class,并将信息交给此class处理)

b.php

如果类B没有继承类A,执行test.php入口文件的代码结果很容易知道:

string 'A 构造函数' (length=14)string 'B action函数' (length=14)string 'A 析构函数' (length=14)

如果类B继承了主要入口请求处理类A:

b.php (继承了A)

那么结果是这样的:

string 'A 构造函数' (length=14)string 'A 构造函数' (length=14)string 'B action函数' (length=14)string 'A 析构函数' (length=14)string 'A 析构函数' (length=14)

结论1:如果B继承了A,当在A中创建B的对象那么会再次调用A的构造函数,也只调用A的构造函数

结论2:如果要想在B中使用A中的数据(往往是对入口URL处理得到的结果),就必须在A的构造函数中定义这些值

如果在类B中写了B的构造函数会怎样?:

那么结果是这样的:

string 'A 构造函数' (length=14)string 'B 构造函数' (length=14)string 'B action函数' (length=14)string 'A 析构函数' (length=14)string 'A 析构函数' (length=14)

对,和你想的一样,A的构造函数没有执行,因为子类的构造函数覆盖了父类的构造函数

知道这个结果没有什么可喜可贺的,重要的是:

结论3:不能写子类的构造函数,否则你别想从父类哪里得到任何动态信息

结论4:最好将类名和类成员函数名字区分开,避免将类名和方法名写的一样(别笑,这样说不是废话,看下边代码),像zf做的那样,类名后边加上'Controller'后缀,方法名后边加上'Action'后缀

我想大部分人都这样干过

如果这样套到单一入口框架中就不行了.

别急,还有:

结论5:因为每次执行子类B都会执行两次A的构造函数,因此最好将类A设计成单例模式

ok,木有了.

 

 

转载地址:http://avjyl.baihongyu.com/

你可能感兴趣的文章
搭建nginx流媒体服务器(支持HLS)
查看>>
struts2上传文件大小受限问题
查看>>
dao使用JdbcTemplate(注入过程)视频学习
查看>>
无刷新URL 更新
查看>>
狮入羊口
查看>>
HDU 1421 搬寝室[DP]
查看>>
二层设备与三层设备的区别--总结
查看>>
ZOJ 3829 Known Notation(字符串处理 数学 牡丹江现场赛)
查看>>
JS操作css样式用法
查看>>
怎样使用 CCache 进行 cocos2d-x 编译加速
查看>>
Thymeleaf 3.0 专题
查看>>
Spring下的@Inject、@Autowired、@Resource注解区别(转)
查看>>
View的setTag()与getTag()方法使用
查看>>
UML中类结构图示例
查看>>
03-hibernate注解-关系映射级别注解-一对一
查看>>
EasyUI combotree的使用
查看>>
C#网络编程二:SOCKET编程
查看>>
【多媒体封装格式详解】--- AAC ADTS格式分析
查看>>
联想IDEAPAD 320C-15笔记本显卡驱动问题
查看>>
ES6简介
查看>>