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

本文共 1331 字,大约阅读时间需要 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,木有了.

 

 

转载于:https://www.cnblogs.com/iLoveMyD/archive/2013/01/22/2872009.html

你可能感兴趣的文章
AnimationUtil
查看>>
成员内部类 局部内部类 匿名内部类
查看>>
[7] 算法之路 - 高速排序之3轴演算
查看>>
PHP查询MySQL大量数据的内存占用分析
查看>>
git批量删除分支
查看>>
LaTex Font Size 字体大小命令
查看>>
[LeetCode] 1028. Recover a Tree From Preorder Traversal 从先序遍历还原二叉树
查看>>
client offset scroll
查看>>
从关系型数据库到非关系型数据库
查看>>
03_10_Object类的toString equals等方法
查看>>
python之三层菜单递归
查看>>
Flink学习笔记:Time的故事
查看>>
JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
查看>>
Handler对象
查看>>
spring注入
查看>>
eclipse添加xsd
查看>>
域名空间那些事 第二季
查看>>
【2007-4】【鹅卵石图案】
查看>>
利用余数选择特殊位置元素
查看>>
position-relative 的问题
查看>>