设为首页 收藏本站
查看: 881|回复: 0

[经验分享] PHP 单一入口框架设计简析

[复制链接]

尚未签到

发表于 2015-8-23 17:21:38 | 显示全部楼层 |阅读模式
  2013年1月22日 19:35:25
  大概过程:所有URL请求->重定向到index.php->加载一个类A->分析URL得到参数信息和将要调用的另一个类B->加载这个类B,并将参数信息传递给该类->执行->结束.
  入口文件(通过.htaccess文件中的rewrite功能把所有请求都转向这个文件):



test.php
<?php
include './a.php'; //存放处理URL获得参数信息的祖先类A
$objA = new A();
$objA->run();
exit;
  主要入口处理类(相当于zend framework的front,用于处理和分发请求):



a.php
<?php
class A
{
public function __construct()
{
var_dump('A 构造函数');
}
public function run()
{
include './b.php';
$obj = new B();
$obj->action();
}
public function __destruct()
{
var_dump('A 析构函数');
}
}
  功能类,处理分发来的请求(超级类将URL分解获得信息,动态new此class,并将信息交给此class处理)



b.php
<?php
class B
{
public function action()
{
var_dump('B action函数');
}
}
  如果类B没有继承类A,执行test.php入口文件的代码结果很容易知道:



string 'A 构造函数' (length=14)
string 'B action函数' (length=14)
string 'A 析构函数' (length=14)
  如果类B继承了主要入口请求处理类A:



b.php (继承了A)
<?php
class B extends A
{
public function action()
{
var_dump('B action函数');
}
}
  那么结果是这样的:



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的构造函数会怎样?:



<?php
class B extends A
{
public function B()
{
var_dump('B 构造函数');
}
public function action()
{
var_dump('B action函数');
}
}
  那么结果是这样的:



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'后缀



我想大部分人都这样干过
<?php
class index
{
public function index()
{
}
}
  如果这样套到单一入口框架中就不行了.
  别急,还有:
  结论5:因为每次执行子类B都会执行两次A的构造函数,因此最好将类A设计成单例模式
  ok,木有了.
  我自己写的框架里的命名方法
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103139-1-1.html 上篇帖子: PHP导出Excel 之 Spreadsheet_Excel_Writer 下篇帖子: GMP for PHP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表