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

[经验分享] 【PHP编程】由单入口模式延伸一些知识

[复制链接]

尚未签到

发表于 2017-4-5 11:41:05 | 显示全部楼层 |阅读模式
说到PHP单入口模式,很快想到关于PHP的一些框架,zend,thinkphp,qeephp,还有cakephp 等,它们都采用了统一的入口,可以根据不同的需要,分前台入口后台入口或者其他操作权限入口,这样的设计模式优点很明显,比如。权限控制,url重写,结合MVC清晰地目录结构。这些都是单入口模式所带来的便利,当然这样的也会带来执行效率的疑问。
    由单入口模式,我顺便提下单件模式,结合OO特性。

<?php
class A{
private static $tag = null;
private function __construct(){}
static function getObject(){
if( null == self::$tag){
self::$tag = new A();
}
return self::$tag;
}
}
$object1 = A::getObject();
$object2 = A::getObject();
if($object1 === $object2){
echo "同一对象";
}else{
echo "不同对象";
}

    通过$tag标示class是否实例化,$tag为空,则实例化当前类并赋给$tag,如果不为空则返回这个指向实例的static 属性。
继续知识延伸...工厂模式
    工厂模式是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。工厂模式在小项目不很实用。不过这种编码形式是非常值得去学习和使用,而且有利于应用于任意规模的项目中。结合MVC结构,可以联想到当前的一些框架结构。
DSC0000.jpg
    下面是‘逍遥冰心’写关于5个框架的比较,有些内容还是比较客观的。
http://www.demonitech.com/index.php/archives/100
    单入口模式(以thinkphp为例)
<?php
// 定义ThinkPHP框架路径
define('THINK_PATH', './ThinkPHP/');
//定义项目名称和路径
define('APP_NAME', 'Myapp');
define('APP_PATH', '.');
// 加载框架入口文件
require(THINK_PATH."/ThinkPHP.php");
//实例化一个网站应用实例
App::run();

thinkphp对单一入口的解释
“单一入口通常是指一个项目或者应用具有一个统一(但并不一定是唯一)的入口文件,也就是说项目的所有功能操作都是通过这个入口文件进行的,并且往往入口文件是第一步被执行的。
单一入口的好处是项目整体比较规范,因为同一个入口,往往其不同操作之间具有相同的规则。另外一个方面就是单一入口带来的好处是控制较为灵活,因为拦截方便了,类似如一些权限控制、用户登录方面的判断和操作可以统一处理了。
或者有些人会担心所有网站都通过一个入口文件进行访问,是否会造成太大的压力,其实这是杞人忧天的想法。”
让我看看thinkphp结构
DSC0001.jpg
流程:
thinkphp.php下,
<?php
$GLOBALS['_beginTime'] = microtime(TRUE);
if(!defined('APP_PATH')) define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']));
if(!defined('RUNTIME_PATH')) define('RUNTIME_PATH',APP_PATH.'/Runtime/');
if(defined('RUNTIME_ALLINONE') && is_file(RUNTIME_PATH.'~allinone.php')) {
// ALLINONE 模式直接载入allinone缓存
$result   =  require RUNTIME_PATH.'~allinone.php';
C($result);
// 自动设置为运行模式
define('RUNTIME_MODEL',true);
}else{
if(version_compare(PHP_VERSION,'5.0.0','<'))  die('require PHP > 5.0 !');
// ThinkPHP系统目录定义
if(!defined('THINK_PATH')) define('THINK_PATH', dirname(__FILE__));
if(!defined('APP_NAME')) define('APP_NAME', basename(dirname($_SERVER['SCRIPT_FILENAME'])));
if(is_file(RUNTIME_PATH.'~runtime.php')) {
// 加载框架核心编译缓存
require RUNTIME_PATH.'~runtime.php';
}else{
// 加载编译函数文件
require THINK_PATH."/Common/runtime.php";
// 生成核心编译~runtime缓存
build_runtime();
}
}
// 记录加载文件时间
$GLOBALS['_loadTime'] = microtime(TRUE);
?>

检查THINK_PATH、 APP_NAME、 APP_PATH、 RUNTIME_PATH 定义
加载系统定义文件 编译缓存目录 加载系统核心类库 根据PHP的版本加载兼容函数库 生成核心编译缓存~runtime.php,至于后面太多细碎的工作。然后build项目配置文件,公共文件。。然后到后面的app,中间Dispatcher,GetModule还有很多我都跳过了,
最后又回到入口。
总结:
这些跟据最近看的东西然后把一些有联系没联系的都添加进去,整体上把单件模式,工厂模式,单入口模式 笼统的概括了下,还需要更深入的去理解,根据thinkphp了解下一个框架的一些基本的操作流程,结合MVC,我觉得thinkphp较之zend还是不够强大。但是适合我们这些菜鸟学习。

运维网声明 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-360565-1-1.html 上篇帖子: PHP操作zip文件时有严重的内存泄漏问题 下篇帖子: php:global变量解析 / function 的作用域
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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