PHP网页编程之一步步编写PHP的Framework(十一)
左手拿着MOTOLOLA右手拿着NOKIA,要多潇洒,有多潇洒,哈哈,终于学会了,但是可能这个时候,又会有人不经意的拍拍肩膀对你说:哥们,别高兴的太早,你还是菜鸟,离学会还差着一大截呢!之前讲了怎样让完成跳转和恳求的转发,固然,也只是很复杂的说了一下,更深的内容需求你本人去读一下详细框架的完成。
如今跳转和转发有了,关于模子的编写可今后面再来,那我就先说一下怎样讲数据从掌握器传递到视图,之前咱们的完成体例十分丑恶:
1 $viewPath = dirname(__FILE__) . '/../views/index.php'; 2 if(file_exists($viewPath)) { 3 include $viewPath; 4 } else { 5 echo 'view does not exists'; 6 }如今我筹办用更优雅一点的体例将数据传递到视图,如今先说一下怎样挪用:
01 <?php 02 class TestController extends Controller { 03 public function test() { 04 $this->_assign(array( 05 'arr' => array( 06 'test','test2' 07 ), 08 'str' => 'it is a str' 09 )); 10 $this->_display('test'); 11 } 12 }
这就是明天我写以后的挪用体例,假如你学过smarty,那末你会发明这和smarty很类似,切实其实,我写toper的时分也是受了smarty的影响,最入手下手的设法是视图这一块就利用smarty,前面想了一下,既然号称是本人的框架,那末视图这一起一定也要全体本人写,固然如斯,然而我前面仍是保存了assign,display这类写法,而且只需设置装备摆设文件修正,完整可以将视图切换到smarty而不利用框架自己的完成。
仿佛扯得有点远了,起首说一下,为了代码的复杂,我将assign和display的完成简化,人人了解思绪就好,真实的框架的完成要庞杂一些。
起首assign,它的功效是为变量赋值,这里我假定传递的参数都是联系关系数组,也就是常说的HashTable,它不该该直接挪用View的接口,这接话柄现怎样赋值:
1 protectedfunction _assign(Array $arr) { 2 View::assign($arr); 3 }
为了处置视图这一块的数据存储和展现,我界说了View.php这个文件,View::assign这个办法是它的一个静态办法,固然,完成的功效人人都懂的。。。
详细View.php中怎样完成的呢?
1 private static $_data = array(); 2 public static function assign($arr) { 3 foreach($arr as $key => $val) { 4 if(!is_int($key)) { 5 //过滤失落如array('test','test2')这类数据 6 self::$_data[$key] = $val; 7 } 8 } 9 }因为assign是静态办法,数据又需求存储到这个类,所以需求界说一个静态的成员变量$_data,这个变量存储掌握器传递的数据。由于之前在掌握器的assign中已停止了类型提醒,所以可以包管在View中的assign传递的形参都是数组,如今只需求一个foreach然后顺次存储便可,那为何不直接利用self::$_data = $arr呢,如许只要一句话呢?
起首,数组中的数据有些多是不合错误的,好比array('test','test2')我就不懂数据test和test2究竟代表了甚么,如许的数据应当在assign中就被剔除失落,假如你请求对照严苛,也能够直接给用户提醒正告。
其次,有能够用户屡次挪用assign,假如直接利用援用,那末第二次挪用assign就会把第一次的数据弄丢,如许是不成容忍的。
好,赋值弄定,然后就是怎样显示的成绩了,在掌握器中,仍是直接挪用接口,而不担任外部完成,然而在挪用接口之前需求停止必定的格局化:
01 protected function _display($str) { 02 if(is_string($str)) { 03 $str = str_replace(array( 04 '.','#' 05 ),array( 06 '/','.' 07 ),$str); 08 View::display(MODULES_PATH . View::VIEW_BASE_PATH . $str . '.php'); 09 } 10 }为了视觉上的雅观和其他一些XXX的缘由,咱们可以将暗示途径的/在作为实参传递的时分酿成.,如许假定要挪用test/test2.php,那末只需求传递test.test2.php便可。固然,如许也存在一个成绩,有时分需求利用.,就像方才这个例子,实践上test.test2.php会被解析为test/test2/php,如许实践上是有成绩的,那末怎样处理呢,我利用一个#代表.,如许方才这个传递的时分就酿成了test.test2#php。如许还有一个成绩,.php根基上每一个页面都有,那为何还要传递出来呢,直接框架帮你加上就行了嘛,所以用户只需求输出test.test2就好,如许从逻辑上也轻易了解,test模块上面的test2这个视图文件。假如你用过thinkphp,你会发明这和它的写法很相似,实践上我在最入手下手写的时分就是边看thinkphp源码边写的,所以良多器材都自创了它的思惟。我团体对照厌恶利用#,所以我根基上在视图文件中没有利用过#,由于我感觉你本人不会这么无聊,去写相似于test.view.php如许的有意义的文件名,直接test.php就行了,如许的名字框架又帮你处理了一局部,所以根基上不存在这个成绩了。
这儿还呈现了一个常量View::VIEW_BASE_PATH,这个常量代表的寄义是视图根目次的途径,如许传递出来的实践上是一个实践的相对途径。
因为display是展现这个视图文件,那末一定会利用include某一个文件,详细的完成以下:
1 public static function display($file) { 2 if(file_exists($file)) { 3 extract(self::$_data); 4 include $file; 5 } else { 6 throw new ViewException(ViewException::NOT_EXISTS_TEMPLATE); 7 } 8 }extract就是讲数组打散,更多的请查询PHP手册。
这里因为能够这个视图文件不存在,所以需求剖断一下,假如视图文件不存在,则直接抛出异常,注重,异常是利用了ViewException,这个类又是新界说的,传递的参数暗示这个异常是由于视图模板不存在而引发的。
那我么来看看详细这个异常类的完成:
01 <?php 02 class ViewException extends BaseException { 03 const NOT_EXISTS_TEMPLATE = 1; 04 public function __construct($code = 0) { 05 switch($code) { 06 case ViewException::NOT_EXISTS_TEMPLATE: 07 $msg = 'the template file is not exists'; 08 break; 09 default : 10 $msg = 'unknown exception'; 11 break; 12 } 13 parent::__construct($msg,$code); 14 } 15 }这个类它承继了BaseException,因为BaseException完成了debug形式开与关分歧情形下展现内容分歧,ViewException也具有这个特征,当debug封闭,抛出异常的时分,也只会跳转到毛病页,不会直接展现异常,如许的处置更容易保护。
会HTML吗?会,我能编好几个大表格排板的网页啦! 写的比较杂,因为我也是个新手,不当至于大家多多指正。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 本文当是我的笔记啦,遇到的问题随时填充 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 做为1门年轻的语言,php一直很努力。 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能: 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
页:
[1]