[散分200]开始写一个超级简单的PHP的MVC框架,大家来谈谈自己的想法 最近我在学习ZF,自己也在写个php4版的国内现在FleaPHP也比较火还有一些国外的的比如p4a,是写的PEAR的扩展 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、居然连页面语言都不设置2、使用“<?=$var?>”欠妥,因为这样的格式是可被关闭的不知道如何写好一个框架。什么是框架?框架是应用程序的半成品,用户可以此为依托搭建自己的应用程序。一个框架并不能覆盖所有的应用既然框架是应用程序的半成品,开发框架可以从成熟的应用项目中提取公共成分开始 我看你把MVC的概念弄混了。你的index.php应该是dispatcher的角色,或者是前端控制器,你的model文件夹下的才是controller,而你的model并没有实现。model是封装了数据库操作的业务逻辑,这并没有体现数据库的操作。还要提几点:1.psff.php中 // 禁止访问构造函数 - protect construct function 但事实是设置成了public,看你index.php不设置public也是不行的。 除非你做成singletion的模式.2.既然用php5,应该好好利用Exception,比你现在的echo 要强的多.3.模板应该可以扩展,不是所有的人都喜欢直接在html页面嵌入<?php的,最少应该集成一种模板接口,比如smarty. 开发框架可以从成熟的应用项目中提取公共成分开始===============================================这个我也举双手赞成!框架这个东西是老外先提出来的。20年前他们也没有框架。也是经过实践和时间的积累发现有一些东西是可以重用的,然后就有了模版。现在已经有很多牛人提出了很多的模式和框架。你何必自己去写呢?拿过来看一下直接用就好了。也许你代码量达到一定程度后自己也提出一种模式或框架呢~~~老外们很注意自由。所以他们所说的框架其实只是一种规范、一种统一的标准,只要你认为你的程序中某个代码块应该属于Model,View,Control里的那一个你就可以放进去嘛。第一次肯定不会尽如人意,不过多写几次,你就会本能的将最适合的代码块放入最适合的层去。到时候你就会发现你的分层和别人的分层大同小异。因为人的思想基本是一样的(天才和白痴除外)~~所以,放手去写吧!总会有收获的~~~~~~~~~~~ 以前大龄青年好象写过一个<<创造世界上最简单的-------php设计模式>>里面就有点这味道 1、居然连页面语言都不设置------------------------我现在正碰到这样一个问题,就是由于页面是由index.php读入然后输出的,尽管index.php是utf-8, 读入的页面也是utf-8, 并且声明了charset=utf-8, 但是浏览器就是不能正确识别。有谁知道如何解决这个问题吗? jf, 感觉php很难做到真正的mvc. To: ice_berg16(寻梦的稻草人):我不太明白你说的,尤其是M的功能举个例子:用户修改密码,输入新密码并点击提交之后,返回一个修改密码成功的页面,在这个过程中,MVC的三个部分都分别完成哪些工作呢? 既然用php5,应该好好利用Exception,比你现在的echo 要强的多.---------------------------个人觉得Exception也就是一个报错和控制流程的功能,如果在知道是何种错误的时候自己控制流程并用echo显示应该比较快吧? 1、居然连页面语言都不设置------------------------我现在正碰到这样一个问题,就是由于页面是由index.php读入然后输出的,尽管index.php是utf-8, 读入的页面也是utf-8, 并且声明了charset=utf-8, 但是浏览器就是不能正确识别。有谁知道如何解决这个问题吗?*****************************/增加一个用户区域判断,不同区域的用户设定不同的编码。:)不管怎样,产品总是在不断的完善当中,有能力与精力写一模板,精神上还是给予强烈UP,呵呵--纯属题外话。 模板应该可以扩展,不是所有的人都喜欢直接在html页面嵌入<?php的,最少应该集成一种模板接口,比如smarty.------------------------------------------其实我写这个框架是自己用的,而我又不太喜欢那些自定义的标签 support!最近也在学ZF,不过它的缺点是有点庞大,对于小规模系统开发来说有点小题大做。看到最近FleaPHP比较火,可能它就是因为它比较小比较灵活的缘故。 用户修改密码,输入新密码并点击提交之后,返回一个修改密码成功的页面,在这个过程中,MVC的三个部分都分别完成哪些工作呢?用户请求 index.php?controller=user&action=setPwdcontroller/目录下应该有class user_controller{ function setPwd{ $m = new user_model(); $m->setPwd(); $v->set("msg","密码修改成功"); $v->display('setPwd_view.htm"); } }model目录下应该有class user_model{ function setPwd($id,$pwd){ $sql = "update user set pwd=$pwd where id = $id"; $this->DB->query($sql); return $this->DB->affetctedRows(); }}view下应该有setPwd_view.htm<?php echo $msg?>----------------以上我只是举个例子,至于各部分的细节可以加以讨论,比如$v->set();$v->display这部分我在plite中把它加入了controller中,只是为了简化操作。--------------------------------------------------------------------------个人觉得Exception也就是一个报错和控制流程的功能,如果在知道是何种错误的时候自己控制流程并用echo显示应该比较快吧?Exception的功能在于实现对代码中出现的异常进行统一处理,程序中并不负责处理这些异常,只是在适当的时候把他们throw出来,如果有一天你发现你简单的echo 出来的信息并不够,需要增加的时候,你可能要修改每个echo的部分,如果用Exception,那样你就可以修改较少的地方,而且Exception有一个trace功能,让你知道程序文件的调用顺序,是哪个文件哪行代码出了问题。你这样简单的echo提供的信息毕竟太少了---------------------------------其实我写这个框架是自己用的,而我又不太喜欢那些自定义的标签那就随便了,不过我觉得这个接口是可以保留的,万一你以后有这个需要的时候可以方便扩展-----------------------以上纯属个人拙见,见笑了。 ice_berg16(寻梦的稻草人)--------------------------谢谢,现在再来看上面的那段话就明白了。的确我的controller只是一个前端的控制器,并没有真正起到controller的作用。再次感谢! 用户修改密码,输入新密码并点击提交之后,返回一个修改密码成功的页面,在这个过程中,MVC的三个部分都分别完成哪些工作呢?两头属于view,即表单和返回页面密码识别并修改属于model而controller实现正确的解释用户的需求(修改密码)并将控制交由正确的model处理model可以自行调用view完成输出,也可返回结果由controller调用view其实我建议你先放弃先入的MVC框框,不要为MVC而MVC。这并不排除你最终的产品就是MVC结构你的主要精力应该放在协调功能化的对象上你有没有注意到,现在已经从面向对象(OOP)深入到面向局部(AOP)了 谢谢唠叨架构再先进如果功能差的话一样是失败。我会注意的,不为MVC而MVC. 我认为自定义的标签是很有必要的。一些很长,但是非常固定的代码可以用标签实现,这样加快了开发速度。而且由于使用编译型模板,没用上的标签解释代码不会编译进来,所以标签并不会影响程序的执行速度。象smarty里的html_options这种会被大量使用的标签你用惯了以后再回去写原来的代码会觉得非常浪费时间。除非你有习惯将所有标签做成编辑器里的文本块。但这样对编辑器的要求较高,很多编辑器都无法使用了。 不一定要非是mvc有点像就可以了 对于大量的GET传递参数,我就不喜欢.哈:) 不过刻意的去追求MVC, 也要看你用PHP是做什么,网站或者产品. 绝对是不一样的. UP 现在的水平有这个必要写个所谓的MVC么?附:解决楼主的不能正确显示网友的问题,在输出真实内容前加上下面这句:header("Content-Type:text/html; charst=UTF-8"); 我把psff类里的变量设成static, 并将构造函数设为private之后,不使用实例,输出的页面能够被正确识别为utf-8编码了。。 无论MVC或者所谓的三层模式,不过都是为了满足需求而产生的一些通用的方法,或架构。只要能满足需要,不一定非要去做哪些成熟的东西。有个性,充满创意的东西,有时候更实用。一般情况下,会尽量将所有的页面表示和处理分离开,以方便前台和后台的开发人员能够各自独立工作。会尽量将所有的字符串,图片等固定的资源从页面中分离出来,以便统一的管理和更新。还有就是对应多语言会更方便。各个层或模块之间相对较对立,使得每个模块都有自己的核心业务,之间用简单的接口通讯,协同工作。这样能增加系统的可维护性。最后,尽可能使用成熟稳定的技术,不要一味的追求热门,例如Ajax php 中date对象能等于oracle中的to_date()吗? file_get_content如何抓取youtube数据 js编码问题 有谁能帮我配iis7+php5 有關php上傳到臨時文件夾的文件的存活時間? 怎么用程序区分内网ip和外网ip啊? 在线等~~ffmpeg的php代码究竟得如何写? 菜鸟问题!在线等!急!!!!!!!!!!!!!!!!100分相送,表感谢好心人! 为什么phpmailer装了smtp后,仍然不能发送邮件? 请教一个简单的url重写问题 怎么样做站内短信提示页面? PHPChina(深圳)腾讯PHP培训班开始招生
2、使用“<?=$var?>”欠妥,因为这样的格式是可被关闭的
不知道如何写好一个框架。
什么是框架?
框架是应用程序的半成品,用户可以此为依托搭建自己的应用程序。
一个框架并不能覆盖所有的应用既然框架是应用程序的半成品,开发框架可以从成熟的应用项目中提取公共成分开始
你的model文件夹下的才是controller,而你的model并没有实现。
model是封装了数据库操作的业务逻辑,这并没有体现数据库的操作。还要提几点:
1.psff.php中 // 禁止访问构造函数 - protect construct function
但事实是设置成了public,看你index.php不设置public也是不行的。
除非你做成singletion的模式.
2.既然用php5,应该好好利用Exception,比你现在的echo 要强的多.
3.模板应该可以扩展,不是所有的人都喜欢直接在html页面嵌入<?php的,最少应该集成一种模板接口,比如smarty.
===============================================
这个我也举双手赞成!框架这个东西是老外先提出来的。20年前他们也没有框架。也是经过实践和时间的积累发现有一些东西是可以重用的,然后就有了模版。现在已经有很多牛人提出了很多的模式和框架。你何必自己去写呢?拿过来看一下直接用就好了。也许你代码量达到一定程度后自己也提出一种模式或框架呢~~~老外们很注意自由。所以他们所说的框架其实只是一种规范、一种统一的标准,只要你认为你的程序中某个代码块应该属于Model,View,Control里的那一个你就可以放进去嘛。第一次肯定不会尽如人意,不过多写几次,你就会本能的将最适合的代码块放入最适合的层去。到时候你就会发现你的分层和别人的分层大同小异。因为人的思想基本是一样的(天才和白痴除外)~~所以,放手去写吧!总会有收获的~~~~~~~~~~~
我不太明白你说的,尤其是M的功能
举个例子:
用户修改密码,输入新密码并点击提交之后,返回一个修改密码成功的页面,在这个过程中,MVC的三个部分都分别完成哪些工作呢?
------------------------
我现在正碰到这样一个问题,就是由于页面是由index.php读入然后输出的,尽管index.php是utf-8, 读入的页面也是utf-8, 并且声明了charset=utf-8, 但是浏览器就是不能正确识别。有谁知道如何解决这个问题吗?
*****************************/增加一个用户区域判断,不同区域的用户设定不同的编码。:)不管怎样,产品总是在不断的完善当中,
有能力与精力写一模板,精神上还是给予强烈UP,呵呵--纯属题外话。
最近也在学ZF,不过它的缺点是有点庞大,对于小规模系统开发来说有点小题大做。看到最近FleaPHP比较火,可能它就是因为它比较小比较灵活的缘故。
controller/目录下应该有
class user_controller{
function setPwd{
$m = new user_model();
$m->setPwd();
$v->set("msg","密码修改成功");
$v->display('setPwd_view.htm");
}
}
model目录下应该有
class user_model{
function setPwd($id,$pwd){
$sql = "update user set pwd=$pwd where id = $id";
$this->DB->query($sql);
return $this->DB->affetctedRows();
}
}view下应该有
setPwd_view.htm
<?php echo $msg?>----------------
以上我只是举个例子,至于各部分的细节可以加以讨论,比如
$v->set();$v->display这部分我在plite中把它加入了controller中,只是为了简化操作。--------------------------------------------------------------------------
个人觉得Exception也就是一个报错和控制流程的功能,如果在知道是何种错误的时候自己控制流程并用echo显示应该比较快吧?Exception的功能在于实现对代码中出现的异常进行统一处理,程序中并不负责处理这些异常,只是在适当的时候把他们throw出来,
如果有一天你发现你简单的echo 出来的信息并不够,需要增加的时候,
你可能要修改每个echo的部分,如果用Exception,那样你就可以修改较少的地方,
而且Exception有一个trace功能,让你知道程序文件的调用顺序,是哪个文件哪行代码出了问题。你这样简单的echo提供的信息毕竟太少了---------------------------------
其实我写这个框架是自己用的,而我又不太喜欢那些自定义的标签那就随便了,不过我觉得这个接口是可以保留的,万一你以后有这个需要的时候可以方便扩展-----------------------
以上纯属个人拙见,见笑了。
的确我的controller只是一个前端的控制器,并没有真正起到controller的作用。
再次感谢!
密码识别并修改属于model
而controller实现正确的解释用户的需求(修改密码)并将控制交由正确的model处理
model可以自行调用view完成输出,也可返回结果由controller调用view其实我建议你先放弃先入的MVC框框,不要为MVC而MVC。这并不排除你最终的产品就是MVC结构
你的主要精力应该放在协调功能化的对象上你有没有注意到,现在已经从面向对象(OOP)深入到面向局部(AOP)了
架构再先进如果功能差的话一样是失败。
我会注意的,不为MVC而MVC.
有点像就可以了
UP
在输出真实内容前加上下面这句:
header("Content-Type:text/html; charst=UTF-8");