目录

MooPHP框架简介

序言

从整个PHP产业来看,随着PHP语言的日益流行,PHP的市场占有率不断提高,各种PHP框架也层出不穷。通过借鉴.Net、Java、Ruby On Rails等语言的开发思想,使得PHP在快速开发、企业应用等方面逐渐站在了Web开发语言的前端。

纵观国外的Zend Framework、CakePHP;国内的FleaPHP、ThinkPHP等这些优秀的PHP开源框架,我们不难发现它们对于PHP初学者还不够友好。较高的入门难度和庞大的体系,已经不能完全满足当前PHP业界日益增长的多种多样的PHP需求。这些PHP开发框架都是非常出色的,但是由于文档、设计思想、开发模式、入门难度中的一点或者几点降低了它们的广泛适用性,同时也为其他PHP开发框架提供了发展的机会。由此,MooPHP应运而生。

实际上,从国外到国内各大PHP专业论坛关于PHP的讨论相当激烈,对于技术永无止境的追求让我们乐此不疲,但是我们应该想到:为PHP初学者提供更大的帮助会对整个PHP业界产生更大的推动力。我敬佩国内外做开源软件和开源框架的朋友们,让我们一起伴随MooPHP为整个开源世界共享自己的一份力量。

MooPHP简介

MooPHP,全名是More & Original PHP Framwork。从MooPHP的全名我们就可以感受到MooPHP框架的设计理念:在安全、高效、稳定、易用的前提下,还原PHP语言的原生态;以松耦合的方式,进一步增强了MooPHP的扩展性。与Zend Framework、FleaPHP等PHP开发框架一样,MooPHP除了核心之外,基于其本身松耦合的特性,非常容易进行外围的扩展。

不可否认,在PHP社区宣布停止对PHP4支持的今天,PHP4的程序仍然占据着主要的地位。MooPHP以其原生态的PHP语言,很好的使用了PHP4、PHP5等多种PHP运行环境,并良好的运行于各种服务器构架中。

语法特点

下面仅以一例来说明MooPHP的语法特点。

安全

PHP程序的漏洞可以说有一半以上是由于变量的未过滤或者未初始化造成的,尤其是数字型变量。在MooPHP中,通过MooGetGPC函数对GPC变量的获得途径和方法做了硬性规定,以保证获得的数据是合法、有效、纯洁的数据。

/**
* 获取GPC变量。对于type为integer的变量强制转化为数字型
* @param string $key - 权限表达式
* @param string $type - integer 数字类型;string 字符串类型;array 数组类型
* @param string $var - R $REQUEST变量;G $GET变量;P $POST变量;C $COOKIE变量
* @return string 返回经过过滤或者初始化的GPC变量
*/
function MooGetGPC($key, $type = 'integer', $var = 'R') {
	switch($var) {
		case 'G': $var = &$_GET; break;
		case 'P': $var = &$_POST; break;
		case 'C': $var = &$_COOKIE; break;
		case 'R': $var = &$_REQUEST; break;
	}
	switch($type) {
		case 'integer':
			$return = intval($var[$key]);
			break;
		case 'string':
			$return = isset($var[$key]) ? $var[$key] : NULL;
			break;
		case 'array':
			$return = isset($var[$key]) ? $var[$key] : array();
			break;
		default:
			$return = intval($var[$key]);
	}
	return $return;
}
 
/**
* 为变量或者数组添加转义
* @param string $value - 字符串或者数组变量
* @return array
*/
function MooAddslashes($value) {
	return $value = is_array($value) ? array_map('MooAddslashes', $value) : addslashes($value);
}

易用

下面的MooWriteFile函数,将PHP中的fopen、flock、fwrite、fclose等四个文件操作函数合并为一。由于文件操作在PHP开发中的常用性,MooPHP更将常用文件以及文件夹操作封装起来,极大的方便了PHP开发。

/**
* 写文件
* @param string $file - 需要写入的文件,系统的绝对路径加文件名
* @param string $content - 学要写入的内容
* @param string $mod - 写入模式,默认为w
* @return boolean 返回是否写入成功
*/
function MooWriteFile($file, $content, $mod = 'w') {
	if(@$fp = @fopen($file, $mod)) {
		@flock($fp, 2);
		@fwrite($fp, $content);
		@fclose($fp);
		return true;
	}
}

稳定

MooPHP是其创始人及其团队两年以来,通过大大小小几十件案例、四次重新架构并最终定型而来的。她凝聚着一个团队对于PHP快速开发以及项目公司培训PHP初学者的独特理解。并且通过持续研究和更深入的探讨,具有长远的发展历史和多年经验的精华积累。

更为惊喜的是,MooPHP已经有了一个稳定的团队,并且由商业公司提供资金支持。这可以保证MooPHP项目具有稳定、可持续的发展,采用MooPHP作为应用程序基础架构是您不二的选择。

高效

MooPHP核心主文件MooPHP/MooPHP.php文件真正核心代码,不超过200行。并有模板缓存,生成静态等一系列成熟的解决方案。高效一直是我们的追求,并付诸于MooPHP实践。

更多的技术细节将不再继续阐述,如果您有兴趣可以参阅MooPHP文档中心:http://www.moophp.net

兼容性

PHP5代表着PHP未来的发展方向,但现实情况是即便在全世界范围内而言,PHP4的市场占有率也是不可忽视的很重要一部分。所以,MooPHP的当前版本仍然基于PHP4开发,虽然没法利用PHP5的一些新特性,却最大程度的保护了开发者的前期技术投资。

完全中文化

MooPHP是国内开发者创建的,所以从源代码注释到文档,所有的一切都是中文。这对于学习使用框架的开发者来说,将提供巨大的便利。即便有问题,也可以在QQ群和论坛上得到及时反馈。

扩展性高

在前面的介绍中,我们已经知道MooPHP以松耦合的体系搭建起了整个框架。松耦合的主要特点就是更灵活,在此架构的支持下,加上MooPHP从开始就已经注意到了扩展性的重要性,MooPHP的扩展性可想而知。

BSD协议

MooPHP开源PHP开发框架采用所有开源协议中,几乎是最“自由”的BSD协议。赋予使用者更高的使用权和决策权。有关BSD协议的详细信息,请参考:http://www.opensource.org/licenses/bsd-license.php 。选择MooPHP来做为项目的基础架构,完全不用担心遇到许可协议问题。

模板体系

经过深入的研究和细致的探寻,MooPHP从其他成熟模板引擎吸取了大量经验和实例,放弃采用任何成熟的模板引擎,而是集众家之所长独立研发了MooTemplate模板引擎。并将其在MooPHP框架中实现。

MooTemplate模板引擎不仅解决了困扰已久的速度瓶颈问题,而且模板中包含丰富易用的逻辑功能,又完美的实现了模板的可扩展性,使得一个模板足以容纳一个页面的全部信息,而不必再像以往那样必须用十几个小模板才能完成一个具有逻辑功能的页面。将为界面的扩充带来极大方便——只需修改模板就可实现一些基本的页面功能而不必改动程序。

MooTemplate模板引擎主要特点如下:

更多详情,请查阅:http://www.moophp.net/documents/templatesyntax

数据库访问

MooPHP封装了常用的MySQL、SQLite等数据库的常用操作。并仍旧按照原生态的思想,不对SQL查询进行过多的干扰,极大的提高了MooPHP在数据库方面的适用性和易用性。

后台体系

我们一向是追求快捷开发项目,而一般的项目都需要有一个管理的后台。所以基于此需求,MooPHP提供了一个快捷的构建管理后台的后台类。后台类使用非常的方便灵活。你需要做的就是关注你具体细节实现的部分。 以下就是构建一个常用管理后台界面的代码:

//note 加载MooPHP框架
require dirname(__FILE__) . '/MooPHP/MooPHP.php';
 
//note 菜单的配置信息
require MOOPHP_ROOT.'/../Moo-admin/menu.inc.php';
 
//note  载入MooAdminTemplate类
$admin = MooAutoLoad('MooAdminTemplate');
 
//note 取得动作和菜单变量
$menu = MooGetGPC('menu', 'string');
$action = MooGetGPC('action', 'string');
$operation = MooGetGPC('operation', 'string');
 
//note 根据条件输出菜单
if($menu == 'topMenu') {
	//note 构造头部菜单
	$admin->topMenu($topMenu);
 
} elseif ($menu  == 'leftMenu') {
	//note 构造左侧边菜单
	$admin->leftMenu($leftMenu);
 
} elseif (!$menu && !$action) {
	//note 初始化框架页面
	$admin->frame('?menu=topMenu', '?menu=leftMenu', '?action=basic');
}
 
//note 头部信息
$admin->adminHeader();
 
//note 加载需要模块 此处省略相关变量过滤过程
if(file_exists(MOOPHP_ROOT.'/../Moo-admin/'.$action.'.inc.php')) {
	require MOOPHP_ROOT.'/../Moo-admin/'.$action.'.inc.php';
}
 
//note 尾部信息
$admin->adminFooter();

后记

其实PHP框架都有大同小异的地方,框架的目的或在于提高开发效率、或规范团队开发、或者是其他目的。但是最核心的目的永远是方便PHP开发,本着这个目的,MooPHP一直在努力。

如果您对MooPHP感兴趣,不妨到http://www.moophp.net http://www.ismole.net上更加深入的了解。我们也热切的希望更多的PHP开发者加入到MooPHP的行列中来。