-
Notifications
You must be signed in to change notification settings - Fork 0
Home
基于PHP5的轻量化,高性能的面向对象的免费开源开发架构
你可以使用本工具作为研究之用,但不建议将其用于商业项目,如果由此引起的任何损失或法律问题与本开发者无任何关系。
如果你引用了本项目中的任何文件,就默许您已接受上面的这个条款。
SeaPHP架构是一种轻量化可配置的高性能架构,并且采用了面向对象的设计思路进行规划。它将PHP的设计模式分为四部分,分别为:系统内核、扩展框架、日志区、工作区。与其他常用的PHP设计框架的最大区别是它的内核抽象层次更高,通过内核来动态的加载需要使用哪个框架。每个框架有很清晰的目录结构,互不重叠互不干扰,让使用者很容易上手,并且能够很容易的进行扩展。
架构的内核所做的功能是管理整个系统中所有类的动态加载,与最底层的公用功能封装。架构通过引入了动态配置文件的方式,对动态设置信息进行分离,因此仅需几分钟的时间,就能重新配置与发布一个基础系统,而不用修改内部的任何核心代码,大大增加系统的健壮性于易用性。
架构的扩展框架设计,可让高级的开发者提供了用于解决某些特殊问题的框架扩展接口。本系统现在提供了两个框架,数据库设应用层框架与WebService应用框架可方便的解决实际问题。
架构的工作区设计目的,是将核心代码与项目的业务逻辑进行分离,作为项目的业务开发者,只需要在工作区编写相应的业务逻辑,不需要去改动各自框架的核心代码。如此当系统发布到线上系统或者更新业务逻辑时,只需要将工作区的文件更新到服务器上,或者更新对应的配置文件,从而降低系统更新时的风险。
SeaPHP架构内所有php文件的开发注释都按照规范编写,如果你使用Zend Studio 9这类的带代码提示的IDE环境进行开发,则可以完全脱离使用手册,就能进行快速的开发,非常适合团队的研发与管理,架构的设计干净简洁。
系统架构的主目录名是SPWF,它存放在Web项目的二级目录中,以减少对项目目录结构的干扰。
SPWF目录下只有4个目录区域,分别为core:内核区、extend:扩展框架区、log:日志区、workgroup:业务逻辑文件开发环境区。因此SeaPHP天生具备极佳的可扩展性。并且让各扩展框架功能框架之间有很好的隔离。每个框架维护自己的动态加载文件与类库文件,不会对内核产生干扰。
core目录区中,只包含系统的运行环境所依赖的最核心部件,以及相对于全局的依赖性最强的公共函数库,不含任何业务逻辑。因此开发者几乎不需要需修改core中的除配置文件以外的任何文件。
extend目录区中,每个二级目录都是一个设计框架或者通用数据模块的隔离区,他们各自维护自己的配置文件与动态加载类,因此各框架与通用模块之间互不干扰,具有很强的低耦合,高内聚的特性。
架构的目录结构: project (Web项目根目录)
SPFW (SeaPHP架构根目录)
core (架构内核目录)
config (架构的环境配置目录)
lib (内核库)
base (内核库-基类)
final (内核库-终态类)
sys (内核库-系统类库)
runtime (内核运行时目录)
extend (扩展框架目录,每中框架为一个二级子目录)
log (日志区)
workgroup (开发者工作区)
良好的命名规范能让开发出来的代码更加优雅与减少错误的发生。SeaPHP遵从的命名规范是:
- 类文件:尽量以大写C开头,.class.php格式结尾,每个类文件中只能定义一个类,类名要与文件名相同。
- 接口文件:必须以大写的I开头,.php结尾,每个接口文件中只能定义一个接口,接口名与接口文件名必须相同。
- 变量定义:类内的全局变量必须以$m开头。每个变量的前导字母必须表示出变量的类型且必须小写,变量名称首字母大写(例如:$maGet:全局数组变量名称为Get,$bIsRun:布尔型变量变量名称为IsRun)。
- 类内常量定义:与变量定义规范相同,只是变量名用大写单词之间用’_’分隔(如const msFIELD_NAME)。
- 函数定义:所有函数尽可能按照:[动词+名词]这样的格式来命名,并且动词必须小写,名词首字母必须大写(例如:获取变量值function getName()、保存日志function saveLog、显示历史记录function showHistory())。
- 类内成员变量与成员函数定义:必须标识出public / protected / private这3中访问权限。
本架构的所有设计框架均使用单一入口的文件的设计模式,通过同一个URL地址来访问所有Web服务。
<?php
define('SEA_PHP_ROOT', '/SeaPhp/'); //Web项目的根(如项目位于二级目录时才需要此设置)
require './SPFW/sea_php_init.php'; //SeaPHP环境的引入文件
_dbg('SeaPHP say:Hello world.');
?>
[Code 1.5.1 入口文件]
如[Code 1.5.1]所示,第二行require './SPFW/sea_php_init.php'; 就是SeaPHP架构的引入语句,引入架构后,就可以使用架构提供的所有服务,或者启动架构内的某个扩展框架。
SeaPhp架构Web根,如果在二级目录下,则需要在入口文件中加入这句定义,并修改其根目录值(注意:前后都必须加上'/')define('SEA_PHP_ROOT', '/SeaPhp/');
SeaPhp架构的根目录的名称,如果修改了架构根目录的名称,则需要在入口文件中加入这句定义,并修改其根目录值(注意:前后都不要出现'/')define('SEA_PHP_SPFW_ROOT', 'SPFW');
SeaPhp架构的本机访问绝对路径,如果使用命令行方式执行(非Web代理方式执行),则需要加入这句定义,并修改本机的绝对根路径(注意:末尾不要带 '/')define('SEA_PHP_MACHINE_ROOT', 'E:/webroot');
/SPFW/core/config/ 目录存放了内核配置文件:
- autoload.cfg.php 为动态加载类的配置,一般不需要去修改由内核管理员维护。
- environment.cfg.php 为架构的系统环境配置文件,其中’show_debug_info’参数如果是线上系统,请设置为false。
- extend_framework.cfg.php为架构的扩展框架与公共扩展模块的入口类加载文件配置。一般不需要去改动。
- 由内核的配置文件可以看出,要配置一个SeaPHP的新开发环境,非常简单。
使用中如遇到什么技术问题,或者发现BUG欢迎及时与我联系,希望有您的协助让SeaPHP开发架构能够更快的成长。 联系邮件 Jerry.Li