好大夫在线php用的php为什么要用框架框架

(ALIVE更新)
第三方登录:开发大型商城网站PHP用哪个框架比较好_百度知道
开发大型商城网站PHP用哪个框架比较好
我们公司向开发一个商城,像淘宝一样能让大家在我们网站有独立的店铺,PS.当然没有淘宝那样牛X。
准备用PHP语言,希望和大神交流一下。现在有一些框架自己没有用过,所以不敢妄下结论,希望和大家探讨一下:Laravel、Symfony2、Yii2、Zend Framework等,哪一...
我有更好的答案
laravel 框架我正在用,有很多特性 ,框架很大,适合开发大项目的框架,但是呢 入手较麻烦 而且中文文档 模糊不全 ,如果有恒心建议用这个框架YII也用过感觉还不错。但是没laravel全面,开发是么i问题,文档也较齐全,只要不是特别大的要求 选他也合适。其余的两个框架没用过,还有CI也不错
商派(Shopex)成立于2002年,是中国领先的电子商务服务和技术供应商。ecstore ecshop等。
PHP各种开源框架和程序比较多 修改修改就能快速搭建,而且apache服务器,mysql数据库开源的成本低。java开发偏后端计算和服务器端服务比较有优势。另外一点还需要参考团队成员的技术特点。开发语言没你想的那么重要,无论java还是php都有非常多重量级的应用
yii2框架和laravel框架应该都可以
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
php的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。使用PHP搭建自己的MVC框架
一、什么是
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:
(控制器Controller)- 负责转发请求,对请求进行处理。
(视图View) – 界面设计人员进行图形界面设计。
(模型Model) – 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。
模型(Model) “数据模型”(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。
视图(View) 视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
控制器(Controller) 控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。
二、为什么要自己开发MVC
网络上有大量优秀的MVC框架可供使用,本教程并不是为了开发一个全面的、终极的MVC框架解决方案,而是将它看作是一个很好的从内部学习的机会,在此过程中,你将学习面向对象编程和设计模式,并学习到开放中的一些注意事项。
更重要的是,你可以完全控制你的框架,并将你的想法融入到你开发的框架中。虽然不一定是做好的,但是你可以按照你的方式去开发功能和模块。
三、开始开发自己的MVC框架
在开始开发前,让我们先来把项目建立好,假设我们建立的项目为todo,那么接下来的第一步就是把目录结构先设置好。
虽然在这个教程中不会使用到上面的所有的目录,但是为了以后程序的可拓展性,在一开始就把程序目录设置好使非常必要的。下面就具体说说每个目录的作用:
application – 存放程序代码
config – 存放程序配置或数据库配置
db – 用来存放数据库备份内容
library – 存放框架代码
public – 存放静态文件
scripts – 存放命令行工具
tmp – 存放临时数据
在目录设置好以后,我们接下来就要来顶一下一些代码的规范:
MySQL的表名需小写并采用复数形式,如items,cars
模块名(Models)需首字母大写,并采用单数模式,如Item,Car
控制器(Controllers)需首字母大写,采用复数形式并在名称中添加“Controller”,如ItemsController, CarsController
视图(Views)采用复数形式,并在后面添加行为作为文件,如:items/view.php, cars/buy.php
上述的一些规则是为了能在程序钟更好的进行互相的调用。接下来就开始真正的编码了。
第一步将所有的的请求都重定向到public目录下,解决方案是在todo文件下添加一个.htaccesss文件,文件内容为:
&IfModule mod_rewrite.c&
RewriteEngine on
RewriteRule
RewriteRule
(.*) public/$1
&/IfModule&
在我们把所有的请求都重定向到public目录下以后,我们就需要将所有的数据请求都再重定向到public下的index.php文件,于是就需要在public文件夹下也新建一个.htaccess文件,文件内容为:
&IfModule mod_rewrite.c&
RewriteEngine On
#如果文件存在就直接访问目录不进行RewriteRule
RewriteCond %{REQUEST_FILENAME} !-f
#如果目录存在就直接访问目录不进行RewriteRule
RewriteCond %{REQUEST_FILENAME} !-d
#将所有其他URL重写到 index.php/URL
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
&/IfModule&
这么做的主要原因有:
可以使程序有一个单一的入口,将所有除静态程序以外的程序都重定向到index.php上;
可以用来生成利于SEO的URL,想要更好的配置URL,后期可能会需要URL路由,这里先不做介绍了。
做完上面的操作,就应该知道我们需要做什么了,没错!在public目录下添加index.php文件,文件内容为:
define('DS',DIRECTORY_SEPARATOR);
define('ROOT',dirname(dirname(__FILE__)));
$url = $_GET['url'];
require_once(ROOT.DS.'library'.DS.'bootstrap.php');
注意上面的PHP代码中,并没有添加PHP结束符号”?&”,这么做的主要原因是:对于只包含PHP代码的文件,结束标志(“?&”)最好不存在,PHP自身并不需要结束符号,不添加结束符号可以很大程度上防止末尾被添加额外的注入内容,让程序更加安全。
在index.php中,我们对library文件夹下的bootstrap.php发起了请求,那么bootstrap.php这个启动文件中到底会包含哪些内容呢?
require_once(ROOT.DS.'config'.DS .'config.php');
require_once(ROOT.DS.'library'.DS .'shared.php');
以上文件都可以直接在index.php文件中引用,我们这么做的原因是为了在后期管理和拓展中更加的方便,所以把需要在一开始的时候就加载运行的程序统一放到一个单独的文件中引用。
先来看看config文件下的config .php文件,该文件的主要作用是设置一些程序的配置项及数据库连接等,主要内容为:
# 设置是否为开发状态
define('DEVELOPMENT_ENVIRONMENT',true);
# 设置数据库连接所需数据
define('DB_HOST','localhost');
define('DB_NAME','todo');
define('DB_USER','root');
define('DB_PASSWORD','root');
应该说config.php涉及到的内容并不多,不过是一些基础数据的一些设置,再来看看library下的共用文件shared.php应该怎么写。
/* 检查是否为开发环境并设置是否记录错误日志 */
function setReporting(){
if (DEVELOPMENT_ENVIRONMENT == true) {
error_reporting(E_ALL);
ini_set('display_errors','On');
error_reporting(E_ALL);
ini_set('display_errors','Off');
ini_set('log_errors','On');
ini_set('error_log',ROOT.DS. 'tmp' .DS. 'logs' .DS. 'error.log');
/* 检测敏感字符转义(Magic Quotes)并移除他们 */
function stripSlashDeep($value){
$value = is_array($value) ? array_map('stripSlashDeep',$value) : stripslashes($value);
function removeMagicQuotes(){
if (get_magic_quotes_gpc()) {
$_GET = stripSlashDeep($_GET);
$_POST = stripSlashDeep($_POST);
$_COOKIE = stripSlashDeep($_COOKIE);
/* 检测全局变量设置(register globals)并移除他们 */
function unregisterGlobals(){
if (ini_get('register_globals')) {
$array = array('_SESSION','_POST','_GET','_COOKIE','_REQUEST','_SERVER','_ENV','_FILES');
foreach ($array as $value) {
foreach ($GLOBALS[$value] as $key =& $var) {
if ($var === $GLOBALS[$key]) {
unset($GLOBALS[$key]);
/* 主请求方法,主要目的拆分URL请求 */
function callHook() {
$urlArray = array();
$urlArray = explode("/",$url);
$controller = $urlArray[0];
array_shift($urlArray);
$action = $urlArray[0];
array_shift($urlArray);
$queryString = $urlA
$controllerName = $
$controller = ucwords($controller);
$model = rtrim($controller, 's');
$controller .= 'Controller';
$dispatch = new $controller($model,$controllerName,$action);
if ((int)method_exists($controller, $action)) {
call_user_func_array(array($dispatch,$action),$queryString);
/* 生成错误代码 */
/* 自动加载控制器和模型 */
function __autoload($className) {
if (file_exists(ROOT . DS . 'library' . DS . strtolower($className) . '.class.php')) {
require_once(ROOT . DS . 'library' . DS . strtolower($className) . '.class.php');
} else if (file_exists(ROOT . DS . 'application' . DS . 'controllers' . DS . strtolower($className) . '.php')) {
require_once(ROOT . DS . 'application' . DS . 'controllers' . DS . strtolower($className) . '.php');
} else if (file_exists(ROOT . DS . 'application' . DS . 'models' . DS . strtolower($className) . '.php')) {
require_once(ROOT . DS . 'application' . DS . 'models' . DS . strtolower($className) . '.php');
/* 生成错误代码 */
setReporting();
removeMagicQuotes();
unregisterGlobals();
callHook();
接下来的操作就是在library中建立程序所需要的基类,包括控制器、模型和视图的基类。
新建控制器基类为controller.class.php,控制器的主要功能就是总调度,具体具体内容如下:
class Controller {
protected $_
protected $_
protected $_
protected $_
function __construct($model, $controller,$action) {
$this-&_controller = $
$this-&_action = $
$this-&_model = $
$this-&$model =& new $
$this-&_template =& new Template($controller,$action);
function set($name,$value) {
$this-&_template-&set($name,$value);
function __destruct() {
$this-&_template-&render();
新建控制器基类为model.class.php,考虑到模型需要对数据库进行处理,所以可以新建一个数据库基类sqlquery.class.php,模型去继承sqlquery.class.php。
新建sqlquery.class.php,代码如下:
class SQLQuery {
protected $_dbH
protected $_
/** 连接数据库 **/
function connect($address, $account, $pwd, $name) {
$this-&_dbHandle = @mysql_connect($address, $account, $pwd);
if ($this-&_dbHandle != 0) {
if (mysql_select_db($name, $this-&_dbHandle)) {
/** 中断数据库连接 **/
function disconnect() {
if (@mysql_close($this-&_dbHandle) != 0) {
/** 查询所有数据表内容 **/
function selectAll() {
$query = 'select * from `'.$this-&_table.'`';
return $this-&query($query);
/** 查询数据表指定列内容 **/
function select($id) {
$query = 'select * from `'.$this-&_table.'` where `id` = \''.mysql_real_escape_string($id).'\'';
return $this-&query($query, 1);
/** 自定义SQL查询语句 **/
function query($query, $singleResult = 0) {
$this-&_result = mysql_query($query, $this-&_dbHandle);
if (preg_match("/select/i",$query)) {
$result = array();
$table = array();
$field = array();
$tempResults = array();
$numOfFields = mysql_num_fields($this-&_result);
for ($i = 0; $i & $numOfF ++$i) {
array_push($table,mysql_field_table($this-&_result, $i));
array_push($field,mysql_field_name($this-&_result, $i));
while ($row = mysql_fetch_row($this-&_result)) {
for ($i = 0;$i & $numOfF ++$i) {
$table[$i] = trim(ucfirst($table[$i]),"s");
$tempResults[$table[$i]][$field[$i]] = $row[$i];
if ($singleResult == 1) {
mysql_free_result($this-&_result);
return $tempR
array_push($result,$tempResults);
mysql_free_result($this-&_result);
return($result);
/** 返回结果集行数 **/
function getNumRows() {
return mysql_num_rows($this-&_result);
/** 释放结果集内存 **/
function freeResult() {
mysql_free_result($this-&_result);
/** 返回MySQL操作错误信息 **/
function getError() {
return mysql_error($this-&_dbHandle);
新建model.class.php,代码如下:
class Model extends SQLQuery{
protected $_
function __construct() {
$this-&connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$this-&_model = get_class($this);
$this-&_table = strtolower($this-&_model)."s";
function __destruct() {
新建视图基类为template.class.php,具体代码如下:
class Template {
protected $variables = array();
protected $_
protected $_
function __construct($controller,$action) {
$this-&_controller = $
$this-&_action =$
/* 设置变量 */
function set($name,$value) {
$this-&variables[$name] = $
/* 显示模板 */
function render() {
extract($this-&variables);
if (file_exists(ROOT.DS. 'application' .DS. 'views' .DS. $this-&_controller .DS. 'header.php')) {
include(ROOT.DS. 'application' .DS. 'views' .DS. $this-&_controller .DS. 'header.php');
include(ROOT.DS. 'application' .DS. 'views' .DS. 'header.php');
include (ROOT.DS. 'application' .DS. 'views' .DS. $this-&_controller .DS. $this-&_action . '.php');
if (file_exists(ROOT.DS. 'application' .DS. 'views' .DS. $this-&_controller .DS. 'footer.php')) {
include (ROOT.DS. 'application' .DS. 'views' .DS. $this-&_controller .DS. 'footer.php');
include (ROOT.DS. 'application' .DS. 'views' .DS. 'footer.php');
做完了以上这么多操作,基本上整个MVC框架已经出来了,下面就该制作我们的站点了。我们要做的站点其实很简单,一个ToDo程序。
首先是在我们的/application/controller/ 目录下面新建一个站点控制器类为ItemsController,命名为itemscontroller.php,内容为:
class ItemsController extends Controller {
function view($id = null,$name = null) {
$this-&set('title',$name.' - My Todo List App');
$this-&set('todo',$this-&Item-&select($id));
function viewall() {
$this-&set('title','All Items - My Todo List App');
$this-&set('todo',$this-&Item-&selectAll());
function add() {
$todo = $_POST['todo'];
$this-&set('title','Success - My Todo List App');
$this-&set('todo',$this-&Item-&query('insert into items (item_name) values (\''.mysql_real_escape_string($todo).'\')'));
function delete($id) {
$this-&set('title','Success - My Todo List App');
$this-&set('todo',$this-&Item-&query('delete from items where id = \''.mysql_real_escape_string($id).'\''));
接下来就是先建站点的模型,在我们的/application/model/ 目录下面先建一个站点模型类为Item,内容直接继承Model,代码如下:
class Item extends Model {
最后一步是设置我们站点的视图部分,我们现在/application/views/目录下新建一个items的文件夹,再在items文件夹下建立与控制器重Action相同的文件,分别为view.php,viewall.php,add.php,delete.php,考虑到这么页面中可能需要共用页首和页尾,所以再新建两个文件,命名为header.php,footer.php,每个文件的代码如下:
view.php文件:查看单条待处理事务
&h2&&?php echo $todo['Item']['item_name']?&&/h2&
&a href="../../../items/delete/&?php echo $todo['Item']['id']?&"&
&span&Delete this item&/span&
viewall.php文件:查看所有待处理事务
&form action="../items/add" method="post"&
&input type="text" value="I have to..." onclick="this.value=''" name="todo"& &input type="submit" value="add"&
&br/&&br/&
&?php $number = 0?&
&?php foreach ($todo as $todoitem):?&
&a href="../items/view/&?php echo $todoitem['Item']['id']?&/&?php echo strtolower(str_replace(" ","-",$todoitem['Item']['item_name']))?&"&
&?php echo ++$number?&
&?php echo $todoitem['Item']['item_name']?&
&?php endforeach?&
add.php文件:添加待处理事务
&a href="../items/viewall"&Todo successfully added. Click here to go back.&/a&&br/&
delete.php文件:删除事务
&a href="../../items/viewall"&Todo successfully deleted. Click here to go back.&/a&&br/&
header.php:页首文件
&title&&?php echo $title?&&/title&
.item {width:400}
input {color:#222222;font-family:georgia,font-size:24font-weight:line-height:1.2color:}
a {color:#222222;font-family:georgia,font-size:24font-weight:line-height:1.2color:text-decoration:}
a:hover {background-color:#BCFC3D;}
h1 {color:#000000;font-size:41letter-spacing:-2line-height:1font-family:helvetica,arial,sans-border-bottom:1px dotted #}
h2 {color:#000000;font-size:34letter-spacing:-2line-height:1font-family:helvetica,arial,sans-}
&h1&My Todo-List App&/h1&
footer.php:页尾文件
当然还有一个必不可少的操作就是在数据中中建立一张表,具体代码如下:
CREATE TABLE IF NOT EXISTS `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`item_name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
至此一个使用MVC开发的网站就开发完成了,你现在可以通过访问http://localhost/todo/items/viewall 查看新建的站点。
没有更多推荐了,
不良信息举报
举报内容:
使用PHP搭建自己的MVC框架
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!PHP框架的选择及几款主流框架的性能基本评测
开源中文社区 & 01-14 09:53:25 & 作者:佚名 &
这篇文章主要介绍了PHP框架的选择及几款主流框架的性能基本评测,文中以简单的hello word程序的运行从负载和响应等各方面分析框架的基本性能,需要的朋友可以参考下
毫无疑问,Web框架技术在近几年已经得到了突飞猛进的发展和普及,在过去几年里,框架技术的普遍经历了比较大的完善过程,很大一部分可以归因于RubyonRails,以及在其他编程语言中流露出的MVC框架思想。
  如果你是一个PHP忍者,而不是一个铁杆的Ruby追随者,你也许会惊奇市面上已经有这么多的框架,哪一个才是适合你的。当然回答和个问题取决于的诸多因素,今天我们将会回顾一下这个典型的问题,如何为你的下一个应用系统选择适合你的PHP框架。
  同时我们也来看一下比较流行的PHP框架,比较一下他们的区别,这样可以帮你自己做出明智的选择,找到最适合你项目的框架。
  明确你的需求
  在你决定为你的项目选择一个框架之前,你当先理解需要,需求和了解一些开发团队幕后的工作,我们总结出了如下几个问题,在开始下一步之前你可以试着问问自己。
  你的应用程序主要集中于解决哪些问题?
  你的应用可以是一个电子商务平台,一个社交网站,消息共享平台或者活动目录,举例来说,如果你正在构建一个电子商务网站,你也许更希望选用一些具有用于处理信用卡和交易会话的成熟的扩展函数库的框架。另一方面,如果是一个轻量级的消息平台(比如说微博类系统),则你也许更应该注重快速的扩展和跨服务器跨数据的支撑访问能力,为了实现负载均衡和快速连接访问。
  你的主机运行环境将是什么?
  有些特殊的框架会需要使用到一些非默认的其它PHP扩展或者软件安装在服务器上,比如,有些框架的数据抽象层必须要求通过PDO来实现访问,而非直接调用更底层的MySQL或MySQLi,或者有些类似wiki类的程序的图像压缩和处理功能往往需要使用到ImageMagick或Graphiviz这些外部程序。而这些扩展也许并不会被所有的共享主机环境(虚拟主机)支持,此外即便是一个轻量级的小型框架,而且自我集成了所有所需的函数库并且也具有良好的可移植性和适应性,这样的框架应用在处理数据密集型的操作或者大型数据处理的系统时,性能又会成为它的主要瓶颈。
  你的开发人员或团队的优势和劣势在于什么?
  如果你是个项目经理,一个重要的事情是了解清楚你的具体开发人员他们的能力和弱势,因为他们是真的闷头干活儿人,所以也许你可以选择一些更加面向开发人员友好的容易上手的框架。当然这个问题的也许并不是影响决定是否采用一个框架的决定性因素(不断地要求自己和团队学习新的技术总是好的),但着绝对是一个会影响到你的时间表、预算和安全等多方面因素的重要考量条件。
  如何在&高耦合性&还是&低耦合性&的框架中做出选择?
  如果从框架产品自身的耦合性来将目前主流的php框架产品分为高耦合性和低耦合性两类。低耦合性的框架看起来更像是一个丰富的函数库和逻辑封装的抽象层,甚至有些好的框架自身就是PHP的一个高级扩展组件,比如PDO,它绝对算得上是一个数据访问的框架也是抽象层。还有一些其他值得一提的低耦合性框架,比如ZendFramework,CakePHP,以及国内开发的ThinkPHP都属于这个范畴。如果你将接手的项目历史问题比较多,并且对UI的自定义比较高,你恐怕需要一个低耦合性的框架来满足你灵活的需求。
  另一方面是一些高耦合性框架的代表,比如一些由CRM衍生而来框架类似Drupal,Joomla,还有直接就是为了高耦合性而开发的OpenbizCubi框架,国内小范围流行的框架还有普元等。这些框架的最优秀的特点是可以让你完全只集中于实现你的核心业务逻辑,你甚至不用去管如何实现UI和用户会话管理这些基础特性,你只需要把你的代码和它们提供的接口规范进行&连接&就可以了。如果你负责的项目是一个新的项目,你肯定不希望把大部分的时间都花在实现基础业务逻辑上,比如可能是为客户公司开发一套&停车场管理系统&,还是选择类似OpenbizCubi这样的框架,在其之上直接去实现你的业务逻辑是最对得起你的时间预算和投资回报率的。
简单的性能评测案例本次测试输出简单的hello word,简单MVC逻辑,(Router -& Controller -& Viewer),没有数据库连接,没有任何逻辑.硬件平台CPU: Intel Core i5 750 (2.67GHz x4)RAM: 4GB软件环境Debian 6.0.4 x86_64 (2.6.32-41)apache 2.2.16 (mpm-prefork,mod-php5)php 5.3.10php-apc 3.1.9 (Optimization for include/require)Copy all projects to /dev/shm/* (Optimization for files read/write)PHP框架列表* zf: Zend FrameworkSite: http://framework.zend.comVer: 1.11.11* zf2: Zend FrameworkSite: http://framework.zend.comSite: https://github.com/zendframework/ZendSkeletonApplicationVer: 2.0.0-beta1* symfony: symfonySite: http://www.symfony-project.orgVer: 2.0.0* cakephp: CakePHPSite: http://cakephp.orgVer: 2.0.4* ci: CodeIgniterSite: http://codeigniter.comVer: 2.1.0* yii: Yii FrameworkSite: http://www.yiiframework.comVer: 1.1.8* micromvc4: MicroMVCSite: http://www.micromvc.comVer: 4.0.0* laravel: Laravel, A PHP Framework For Web ArtisansSite: http://laravel.comVer: 2.0.2* slim: Slim FrameworkSite: http://www.slimframework.comVer: 1.5.0* yaf: Yet Another Framework in PHP ExtensionSite: http://code.google.com/p/yafphpVer: 2.1.3-beta (yaf.cache_config=1)* FuelPHP: Simple, Flexible, Community driven Web FrameworkSite: http://fuelphp.com/Ver: 1.1* ColaPHP:Site: http://code.google.com/p/colaphp/Ver: 1.2-ga# XHProf: A Hierarchical Profiler for PHPSite: http://pecl.php.net/xhprofVer: 0.9.2# The source code of this testing:Source: https://github.com/eryx/php-framework-benchmark1. Apache BenchmarkRequests pre second (-c 100 -n 30000), the bigger is better
请求/秒(-c 200 -n 50000), 数值越大越好
2. 系统负载压力测试一分钟内完成的负载图越小越好(-c 100 -n 30000)
3. 内存使用率测试hello word占用的内存,越小越好.
4. 响应时间页面的响应时间.单位微妙
5. 调用方法的数量(Facebook XHProf)单个hello word页面调用了多少方法,zend5620个方法,是不是太臃肿了。
6. 文件数量打开hellow word用到included or required in 文件的数量.越小越好,zend很多,yii19个,yaf才4个,不快才怪。
大家感兴趣的内容
12345678910
最近更新的内容

我要回帖

更多关于 好用的php框架 的文章

 

随机推荐