仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1244|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页编程之一步步编写PHP的Framework(五)

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:29:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
刚开始觉得自己对这些多少有些基础,很简单,但是看了老师那么熟练的进行网页布局的时候,突然之间发现,其实,我的基础并没有自己想像的那么好,自己设计的页面其实并不好看,就连表格的边框为1像素都不会弄。     
         上一次我讲到利用主动导入可以完成一个类的延迟加载,这一次我想讲一下设置装备摆设文件。
         不晓得人人注重了没有,前几篇文章我都没有触及到设置装备摆设文件,可是在一个项目中,设置装备摆设文件又是比不成少的。
         如今假定将Route.php中的默许掌握器和Action变成可设置装备摆设的,怎样弄呢?
         咱们利用最复杂的体例:
1 <?php 2  $defaultController = 'Index'; 3  $defaultAction = 'index';   
        然后在Route.php中include这个文件:
1 <?php 2 include APP_PATH . '/config.php'; 1 $controller = empty($_GET['c']) ? $defaultController : trim($_GET['c']); //设置了默许的掌握器 2 $action = empty($_GET['a']) ? $defaultAction : trim($_GET['a']); //设置了默许的Action  固然也能够利用这类体例:
1 <?php 2 return array( 3        'defaultController' => 'Index', 4        'defaultAction' => 'index' 5 );       仍是在Route.php中include:
1 <?php 2 $config = include APP_PATH . '/config.php'; 1 $controller= empty($_GET['c']) ? $config['defaultController'] : trim($_GET['c']); //设置了默许的掌握器 2 $action = empty($_GET['a']) ? $config['defaultAction'] : trim($_GET['a']); //设置了默许的Action   
        然而因为设置装备摆设文件很有能够在全部框架运转进程的各个类都有效到,而前两种体例都只能在某一个类外面的某一个办法中利用,怎样让它在各个类都可使用呢?
        咱们可以可使用一个static办法来处理,好比专门界说一个Config类来寄存设置装备摆设信息,Config::get来读取设置装备摆设信息,Config::set来设置设置装备摆设信息,详细做法读者可以本人去测验考试一下。
        固然我禁绝备采取这类体例,能够事先我看Thinkphp源码的时分被它优雅的特别函数C迷住了吧,前面我在写Toper的时分也利用了一些特别的函数,而C次要是担任设置和读取设置装备摆设信息,团体概念,面向对象是需要的,然而不是甚么都要面向对象,所以我筹办界说一个function.php来寄存一些私有的函数,我把它称为私有函数库。
        因为有了私有函数库,咱们可以将上一篇外面的主动导入(__autoload)也转移到这个文件中,由于在Route.php呈现一段__autoload的代码仍是挺诡异的!!
        好了,怎样完成方才咱们说的经由过程一个函数来完成设置装备摆设信息的设置和读取呢?
        好了,先展现我在Toper中的完成吧:
01 function C($name = null,$val = null) { 02     static $_config = array(); 03     if(empty($name)) { 04         return $_config; 05     } elseif(is_string($name)) { 06         if(empty($val)) { 07             if(!strpos($name,'=>')) { 08                 //一维 09                 return isset($_config[$name]) ? $_config[$name] : null; 10             } else { 11                 //今朝只撑持二维 12                 $name = explode('=>',$name); 13                 returnisset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null; 14             } 15         } else { 16             if(!strpos($name,'=>')) { 17                 //直接设置 18                 $_config[$name] = $val; 19             } else { 20                 //设置二维 21                 $name = explode('=>',$name); 22                 $_config[$name[0]][$name[1]] = $val; 23             } 24         } 25     } elseif(is_array($name)) { 26         foreach($name as $key=>$value) { 27             $_config[$key] = $value; 28         } 29         return ; 30     } else { 31         throw new Exception('参数类型失足'); 32         return ; 33     } 34 }   
           看着代码挺长的,实践上道理很复杂,假如传递的参数只要一个,那末第二个参数就挪用默许参数,即NULL,再辨认是不是第一个参数是不是是字符串,那末这个函数就辨认为读取,假如第二个参数不为空或第一个参数为数组,那末就辨认为设置!!
           因为我本人如今对照懒,并且我用这个函数用的函数蛮随手的,所以在这儿我就直接用这个函数来作为例子了,更多内容可以检查Toper的/Library/Toper/function.php。
           好比如今要读取defaultController,那末只需利用C('defaultController')便可,假如要设置,那末利用C('defaultController','Index')!!!
            如今咱们只需求在进口文件中导入这个function.php便可:
   
1 <?php 2 defined('APP_PATH') define('APP_PATH',dirname(__FILE__) . '/..'); 3 defined('FRAMEWORK_PATH') define('FRAMEWORK_PATH',APP_PATH . '/Library/Test'); 4 defined('MODULES_PATH') define('MODULES_PATH',APP_PATH . '/UserApps/Modules'); 5 include FRAMEWORK_PATH . '/function.php'; 6 include FRAMEWORK_PATH . '/Route.php'; 7 Route::run();           人人能够注重到了,C函数最入手下手的时分,外面没有寄存任何元素,那末咱们怎样停止初始化,将设置装备摆设文件的内容写入C函数呢?
   
            之前咱们将设置装备摆设文件寄存在项目根目次,如许实践上是不合适之前咱们的商定的标准,所以如今讲这个设置装备摆设文件剪切到/UserApps/Configs目次上面,为了更便利的利用这个途径,咱们界说一个CONFIGS_PATH来指向设置装备摆设文件的途径。
          如今咱们看看进口文件酿成了甚么样了:
   
1 <?php 2 defined('APP_PATH') define('APP_PATH',dirname(__FILE__) . '/..'); 3 defined('FRAMEWORK_PATH') define('FRAMEWORK_PATH',APP_PATH . '/Library/Test'); 4 defined('MODULES_PATH') define('MODULES_PATH',APP_PATH . '/UserApps/Modules'); 5 defined('CONFIGS_PATH') define('CONFIGS_PATH',APP_PATH . '/UserApps/Configs'); 6 include FRAMEWORK_PATH . '/function.php'; 7 C(include CONFIGS_PATH . '/config.php'); //写入设置装备摆设信息 8 include FRAMEWORK_PATH . '/Route.php'; 9 Route::run();        然后咱们修正一下Route.php
   01 <?php 02 class Route { 03     public static function run() { 04         $controller= empty($_GET['c']) ? C('defaultController') : trim($_GET['c']); //设置了默许的掌握器 05         $action= empty($_GET['a']) ? C('defaultAction') : trim($_GET['a']); //设置了默许的Action 06         $controllerBasePath = APP_PATH . '/UserApps/Modules/Controllers/'; 07         $controllerFilePath = $controllerBasePath . $controller . 'Controller.php'; 08         if(is_file($controllerFilePath)) { 09             include $controllerFilePath; 10             $controllerName = $controller . 'Controller'; 11             if(class_exists($controllerName)) { 12                 $controllerHandler = new $controllerName(); 13                 if(method_exists($controllerHandler,$action)) { 14                     $controllerHandler->$action(); 15                 } else { 16                     echo 'the method does not exists'; 17                 } 18             } else { 19                 echo 'the class does not exists'; 20             } 21         } else { 22             echo 'controller not exists'; 23         } 24     } 25 } 告诉你了一个方式,但是缺少努力这一环节,那也是白搭。
海妖 该用户已被删除
沙发
发表于 2015-2-3 23:40:12 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
简单生活 该用户已被删除
板凳
发表于 2015-2-6 21:29:30 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
飘灵儿 该用户已被删除
地板
发表于 2015-2-18 19:46:35 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
透明 该用户已被删除
5#
发表于 2015-3-6 09:29:55 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
变相怪杰 该用户已被删除
6#
发表于 2015-3-12 23:14:35 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
小魔女 该用户已被删除
7#
发表于 2015-3-19 17:58:20 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
山那边是海 该用户已被删除
8#
发表于 2015-3-30 01:57:26 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
因胸联盟 该用户已被删除
9#
发表于 2015-4-1 18:31:39 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
爱飞 该用户已被删除
10#
发表于 2015-4-9 16:00:42 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
第二个灵魂 该用户已被删除
11#
发表于 2015-4-12 18:24:30 | 只看该作者
实践是检验自己会不会的真理。
再见西城 该用户已被删除
12#
发表于 2015-4-17 19:35:55 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
深爱那片海 该用户已被删除
13#
发表于 2015-4-21 07:57:52 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
若天明 该用户已被删除
14#
发表于 2015-4-30 21:16:45 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
金色的骷髅 该用户已被删除
15#
 楼主| 发表于 2015-5-4 09:35:25 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
谁可相欹 该用户已被删除
16#
发表于 2015-6-13 21:52:00 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
若相依 该用户已被删除
17#
发表于 2015-6-16 23:33:31 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
小女巫 该用户已被删除
18#
发表于 2015-7-14 06:24:48 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
不帅 该用户已被删除
19#
发表于 2015-7-17 13:32:33 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
莫相离 该用户已被删除
20#
发表于 2015-7-18 13:58:25 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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