面向对象的PHP开发框架FCS教程[1] 框架基础
来源:互联网 发布:js调用按钮的点击事件 编辑:程序博客网 时间:2024/04/30 12:10
面向对象的PHP开发框架FCS教程[1] 框架基础
2006年5月26日11:14星期五
一、FCS是什么
简单的说,FCS是一个快速、兼容而且简单的面向对象的轻量级PHP开发框架,全称是 Fast,Compatible & Simple OOP PHP Framework。
FCS是一个开源的PHP框架, FCS框架是为了简化企业级应用开发而诞生的。使用FCS,你可以更方便和快捷的开发和部署应用,当然不仅仅是企业级应用,任何PHP应用开发都可以从FCS的简单、兼容和快速的特性中受益。简洁、快速和实用是FCS发展秉承的宗旨,为此FCS会不断吸收和融入更好的技术以保证其新鲜和活力!
FCS的特性主要体现在:
轻量级——从框架文件大小和系统负荷上面来说FCS都算是轻量级的,整个FCS框架可以打成一个不到1M的压缩文件(在FCS发布早期测试版本的时候,曾经有人把FCS比喻成袖珍型PHP框架,因为那个时候的FCS框架还不到50K),而且FCS框架无需安装,对系统的处理开支也非常小。
兼容性——很多框架并没有考虑PHP4的实现,但是有很多原因我们依然希望在PHP4上面做应用,FCS很好的实现了这一点,并且模拟了一些PHP5具备的优秀特性。
容器——FCS系统把整个网站应用封装到一个WEB容器中,该容器的访问入口是唯一的,找不到任何另外一个可以访问该应用的入口(在某种部署方式下即使是可以访问的,但是也不能开启应用),容器有一个后台端口,连接数据库进行数据交互,该容器本身由各类业务模型和视图、应用控制器组成。容器中有很多配置文件或者定义文件组成,他们使得应用开发更灵活。
框架——FCS更是一个框架,系统的调用过程和类库架构图如下所示:
二、系统特性
FCS框架包含很多特性,包括对OO-RDMS Mapping 、编码转换和UTF-8支持、XML模板引擎、动态数据缓存、多项目的支持以及对企业级开发和部署的支持。并且在可维护性、安全性、可移值性以及可扩展性方面都有很好的表现。只有在使用FCS进行项目开发过程中才能充分体会到FCS的更多特性。
面向对象和MVC模式
面向对象是FCS框架的实现基调,除了个别必须的公共方法之外(比较频繁使用的方法,为了调用简单考虑),框架的全部文件都采用类的形式实现,为以后的维护和扩展带来了方便。整个应用系统采用单一入口方式访问,其它组件和类库被有效的封装到一个安全的地方,甚至无法通过WEB浏览器访问到,只有入口程序和模板文件在WEB目录下面。
因为采用了面向对象的开发方式,FCS系统的可维护性、可扩展性和可移植性方面表现都非常出色。
和很多应用框架一样,FCS也采用了MVC模式,但是在实际过程中,做了些调整,控制器由应用控制器和Action控制器类(和App并无继承关系)构成,Dao和Vo类库实现了模型,模板则实现了视图的概念。并且系统的控制部分和模型部分被更安全地封装起来,放到WEB无法访问的路径下面。
命名空间和国际化支持
FCS的所有类库引用采用命名空间的方式,以保证类库的唯一性。在应用开发的时候不需要使用传统的include 或者require 指令,取而代之的是使用 import方法(为了考虑.Net的开发人员,另外Import方法还有个别名using),import方法导入的根目录是系统的类库目录 LIB_DIR。只要遵循命名规范,类库的导入和使用就显得方便有效,如
Import(“FCS.util.ListIterator”);
Import(“com.liu21st.index.Vo.UserVo”);
Import方法支持多个文件引入和子目录引入
Import(“com.liu21st.index.Vo.*”);
Import(“com.liu21st.index.* ”);
但是系统不推荐使用子目录引入的方式,因为如果目录下面文件较多会给系统带来较大的目录遍历开销。
系统对国际化的支持比较良好,支持语言包功能,您可以定制你需要的语言提示信息。
系统在启动应用的时候会检查当前用户的浏览器接受的语言,并会尝试在语言文件目录下面寻找该语言包定义文件,如果不存在则会采用默认的语言文件。
在检查到正确的语言后,系统会调用setlocale方法设置本地化支持(包括对时间、数字和货币的本地化支持)。
系统默认语言是简体中文,语言文件采用常量定义,您可以方便地扩展其它语言包文件。
Lang目录下面的语言文件属于系统语言包,如果您的项目也需要定义语言包,请在Lang目录下面建立相应的项目名称(APP_NAME)目录,并放置相应的语言包文件。
兼容PHP4和PHP5
这是FCS框架最主要的特色之一,FCS框架的实现是和环境和数据库无关的。系统在实现的过程中充分考虑了PHP4的环境(要求的PHP版本是4.3.0以上),并且在不牺牲性能的前提下模拟的部分PHP5的实现方法,最大程度地保证了系统在运行过程中在PHP4下表现出的出色性能和在PHP5下优势的充分发挥。
由于先天的缺陷,PHP4的面向对象机制不够完善,很多只有PHP5才能完成的面向对象特色如Interface、访问控制、Abstract、Final等在PHP4下无法运行,但是在有可能的情况下在其它方面作出了一定程度的PHP5特性模拟。
首先在FCS框架的基类Base类中实现了只有PHP5才支持的架构函数__construct()和析构函数__destruct(),并且对PHP5作了更大程度的支持,在PHP5环境下进行应用开发显得更加方便和便捷,例如魔术函数的实现增强了应用开发的容错性和自我完善性。非常明显的一个例子就是在PHP5环境下面,所有FCS基类库的引用都不必手动加载,由__autoLoad()方法自动加载。另外一个情况就是__set()和__get()方法的实现,可以避免在定义数据对象的时候书写枯燥的get和set方法(因为数据对象都是Public的,并且__set()和__get()方法首先判断对象的属性是否存在)。
其次,系统模拟了一些PHP4中没有的而又是非常需要的方法和类库,包括property_exists()、array_combine()等方法和ListIterator和ArrayList、HashMap等类库,某些类库是SPL中才有实现。
框架的基类库都基于Base扩展,这样充分保证了系统的兼容性。
自动编码转换和utf-8支持
框架的文件全部采用UTF-8编码格式(为了更好的支持扩展,您以后的应用组件也应该遵循该规范),您可以配置输出的页面编码格式,如gb2312等(默认采用UTF-8输出)。系统根据配置文件中设置的编码格式自动对页面进行编码转换,支持iconv和mb_string两种方式,为了提高效率,如果系统的模板编码设置和输出编码设置项相同,则不会进行编码转换。
模板引擎
FCS内置了一个性能卓越的模板引擎,是一个使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自定义标签库,利用该模板引擎可以方便地定义模板文件,从而达到快速开发的目的。
FCS内置模板引擎的的模板标签有两种类型:第一种是普通标签,类似于Smarty的模板标签,在功能方面作了部分简化,增强了显示功能,弱化了逻辑控制功能;第二种是XML标签库形式,该模板技术是新版(0.8版本以上才支持)新增的标签技术,有效地借鉴了Java的标签库技术,在控制功能和各方面都比较强大,而且允许自定义标签库,是新版FCS系统引入和推荐的模板标签技术。两种标签方式的结合使用,可以让您的模板定义功能相当强大。
FCS架构的设计中模板和程序完全分离,一套模板文件就是一个目录,模板是标准html文件(可以配置成其它后缀,如.shtml,.xml等),可以单独预览。
系统会在需要显示的过程中动态加载模板文件,并编译该模板文件,生成一个模板缓存文件,下次会自动检测该模板是否变更过,如果在缓存有效期之内并且模板没有改动过的话,系统就不会再次重新编译模板,而是直接读取编译过的缓存模板文件,编译过的缓存模板文件一旦包含之后就可以直接显示变量的值。所以,缓存模板中的显示内容依然是动态的(除了个别系统特殊变量的输出采用静态输出,因为其值比较稳定),而并不是一个静态的输出,如果您的应用需要采用静态文件输出,请设置启用静态文件功能,系统会读取静态文件输出,并且,还可以设置静态文件的有效期。
由于使用了模板动态缓存技术,在您第一次运行某个模块的某个操作时候,对应的模板文件就会被缓存,下次读取的时候,无论是模板文件修改或者是缓存文件被删除,系统都会重新生成缓存文件。你可以设置模板缓存的有效时间间隔,如每隔10分钟重新读取模板文件。模板动态缓存只是让您免去每次重复编译模板的时间,数据的动态缓存在后面有详细的解说。
异常和错误处理
FCS对异常处理的支持是完全的,无论是在PHP4或者PHP5环境下,您都可以使用Throw_exception方法来抛出异常(默认抛出FcsException异常,你可以指定抛出的异常类型),框架集成了AppException方法和AppError方法来处理异常和错误,如果设置为非调试模式的话,抛出异常和错误的结果是定向到一个指定的错误页面,对于用户来说更友好些。
系统的FCSException类是所有异常类的基础类,其它模块的异常处理类应该在该基础类上扩展。该类的实现进行了版本判断,如果在PHP5下面则FCSException类本身也是继承Exception类,否则就实现了一个模拟的异常类,这个要归功于PHP的debug_backtrace方法,是它让异常处理的PHP4实现成为可能。
默认Throw_exception方法只能抛出系统异常,如果您要使用Throw_exception方法来抛出自己扩展的异常处理,请添加$type参数来指定需要抛出的异常类型,如:throw_exception(‘用户信息错误’,’UserException’)。
抽象数据库访问层
FCS自带的抽象数据库访问层支持多种数据库,并且可以很方便地扩展。目前系统支持的数据库包含有MySQL、MySQLi、PgSQL和Oracle,打算提供支持的还有ODBC等,您可以根据我们的驱动规范来开发自己的数据库驱动类库。
通过数据库公共类库Db来访问底层数据库操作,或者可以通过封装的Dao数据访问对象来操作数据库。
实现了简单的OO-RDMS Mapping 。
充分支持PATHINFO
对搜索引擎友好的充分支持,框架会把所有的GET方式传值转换成PATHINFO形式,并且会把PATHINFO参数转换成GET数组变量,让您可以保持以前的传值和链接形式,转换的工作由框架来完成。您还可以关闭PATHINFO形式,甚至框架还支持你对PATHINFO地址的自定义格式,让你的URL地址富有创造性;
系统支持多种方式的PATHINFO地址,您可以根据应用的要求灵活地选用何种方式。
普通模式:?m=moudule&a=action&id=2
第一种:/m,module/a,action/id,2/
第二种:/m=module,a=action,id=2/
第三种:/module/action/id/2
系统默认采用第三种方式(FCS0.7以上版本默认)。还可以设置不同的分割符,
例如:把PATH_DEPR的值设置为 : 那么您的URL看起来会象下面的效果
http://<serverIp>/var1:val1/var2:val2/var3:val3/
PATHINFO技术对以往的编程方式没有影响,因为GET 和POST方式传值依然有效,因为系统对PATHINFO 方式是自动处理,会把类似 ?m=moudule&a=action&id=2 的URL地址重新转换为/module/action/id/2 或者你设置的格式。
不同的是在由于因为模拟了目录,所以在模板页面中对当前目录下面的连接处理不当可能会导致失效。如果你的系统不支持PATHINFO方式,或者你依然不打算采用PATHINFO方式,那么可以在项目配置文件中把URL_MODEL的值设置为0就可以使用传统模式了。
系统日志和调试
实现了简单的日志记录类,通过Log::Write($errorStr) 方法来记录系统日志,包括系统异常和错误信息,您可以随时查看日志文件。日志文件分为SystemErr.log 和 SystemOut.log 。前者主要用于记录系统异常,通常为抛出异常或者捕获严重错误后自动记录,后者主要用于调试信息和页面的一些非严重错误记录,调试信息一般为systemOut方法写入。
在系统的调试模式中,可以很方便在在错误调试页面跟踪错误,系统的所有异常和错误都会记录到系统日志中,在应用实施后,您可以关闭调试模式,这样系统就不会自动完成日志记录,除非你自己触发日志写入。
系统对每个项目单独记录日志,所以查看的时候请注意定位到某个项目目录下。
如果您的应用组件需要记录特殊的日志,也可以调用(或者扩展)该方法来完成。
项目部署和协作开发
FCS框架为企业级的部署和开发提供了方便。
首先,FCS框架无需安装,仅仅需要上传就可以了,而且支持PHP4和PHP5,为了做到框架的通用性,在系统的核心设计上基本上没有使用特殊的函数和类库(因为某些特殊需要个别地方对PHP4不支持的函数作了模拟实现),并作了一定程度的PHP5模拟,让框架在PHP4下没有牺牲太多的性能,而且运行顺畅。
FCS系统目录可以传到服务器的任何位置,例如 C:/FCS 或者 /User/Local/FCS
WebApps目录传到你需要访问的WEB目录下面,由于FCS系统的架构特点,如果你有多个网站应用系统基于FCS框架构建,那么你不需要设置多个网站目录,因为每个网站应用都采用单一入口(也就是说一个网站就只有一个入口文件,模板目录也是公用的,而且并不会相互影响),当然,由于其它原因(如由于不同域名的关系或者要放到不同的服务器)您仍然可以分开多个目录存放,这个并没有影响。
其次,系统无需任何配置修改就可以运行,让你的应用部署更加简单,当然,作适当的满足你需要的调整,可以让应用变得更实际。框架是简单的,但是可以构建复杂的应用。
新版的FCS框架把系统目录和网站目录分离,完全可以做到更安全的部署应用,您可以把FCS系统目录放到非WEB访问目录下面,以保障应用的代码安全。新版类库的设计更加满足企业级应用开发中的协作和分布式开发的需要。每个项目、每个模块都独立目录,可以达到方便地集成。网站目录下面只有应用的首页文件,而且其中并没有任何业务逻辑处理,纯粹是系统应用的调用和初始化。也会项目的迁移提供了便利。
不同应用项目的应用类库放在FCS系统目录的Lib目录下面
Lib目录下面的FCS目录为基类库,可供各个项目调用。每个应用项目可以在Lib目录建立相应的命名空间,如:com.liu21st.App1、Com.liu21st.App2(实际的文件存放可能就是在Lib目录下面的com/liu21st/App1和com/liu21st/App2。)各个项目的类库之间也可以相互调用,如:
Import (“com.liu21st.App1.Dao.UserDao”)
Import (“com.liu21st.App2.Util.common”)
这样做的目的是为了防止项目之间的冲突,当然你或许想直接用项目名称来区分不同的项目,那么也没有问题,只要项目没有重名,你可以使用App1、App2的方式。
Import (“App1.Dao.UserDao”)
Import (“App2.Util.common”)
FCS支持分布式的开发和团队合作开发,体现在可以实现项目分布开发和模块分布开发,对于调试工作没有影响,最后项目整体完成后再统一集成。每个项目包是一个独立的目录,项目包下面的每个模块又相互独立,因此,协作和集成都很容易完成。每台开发服务器上面只要有FCS框架本身的基类库和框架文件就可以进行应用开发和测试工作。
基于FCS框架进行应用开发,开发人员只需要关注应用类库,所有的后台编码全部都集中(并且大部分情况下只有)在应用类库上面,在进行测试的时候需要模板文件的配合,模板文件的制作参考后面的模板指南。开发过程中涉及到的应用类库有几种区别,详细参考后面的开发指南。
同时,FCS框架还为同时并发多个项目提供了良好的支持,主要表现在:
每个项目分配不同的入口文件,容易部署;
每个项目有单独的配置文件,相互独立,互不影响;
每个项目的缓存文件和静态文件相互独立,更改和调试互不影响;
每个项目可以单独定制各自的语言包,不会冲突;
每个项目有独立的类库目录,分工协作更加方便;
每个项目的系统日志有单独目录,互不影响;
简单的说,FCS是一个快速、兼容而且简单的面向对象的轻量级PHP开发框架,全称是 Fast,Compatible & Simple OOP PHP Framework。
FCS是一个开源的PHP框架, FCS框架是为了简化企业级应用开发而诞生的。使用FCS,你可以更方便和快捷的开发和部署应用,当然不仅仅是企业级应用,任何PHP应用开发都可以从FCS的简单、兼容和快速的特性中受益。简洁、快速和实用是FCS发展秉承的宗旨,为此FCS会不断吸收和融入更好的技术以保证其新鲜和活力!
注意:有一个非常混淆的概念来自FCS命名本身,尤其是熟悉Flash开发的人员,因为很多人都知道之前的Micromedia有个服务器端产品叫做Flash Commucition Server(现在已经更名为FMS),其缩写名也是FCS,并且由于我的Blog早期有很多资料都是关于这个FCS的,因此误以为我的FCS框架便是这个。我之所以把我的PHP框架命名为FCS,除了单词语义缩写吻合之外,对于FCS的情结也是一个重要原因。(见我的Blog上面Fast, Compatible & Simple 我的FCS情结一文)。
FCS的特性主要体现在:
轻量级——从框架文件大小和系统负荷上面来说FCS都算是轻量级的,整个FCS框架可以打成一个不到1M的压缩文件(在FCS发布早期测试版本的时候,曾经有人把FCS比喻成袖珍型PHP框架,因为那个时候的FCS框架还不到50K),而且FCS框架无需安装,对系统的处理开支也非常小。
兼容性——很多框架并没有考虑PHP4的实现,但是有很多原因我们依然希望在PHP4上面做应用,FCS很好的实现了这一点,并且模拟了一些PHP5具备的优秀特性。
容器——FCS系统把整个网站应用封装到一个WEB容器中,该容器的访问入口是唯一的,找不到任何另外一个可以访问该应用的入口(在某种部署方式下即使是可以访问的,但是也不能开启应用),容器有一个后台端口,连接数据库进行数据交互,该容器本身由各类业务模型和视图、应用控制器组成。容器中有很多配置文件或者定义文件组成,他们使得应用开发更灵活。
框架——FCS更是一个框架,系统的调用过程和类库架构图如下所示:
二、系统特性
FCS框架包含很多特性,包括对OO-RDMS Mapping 、编码转换和UTF-8支持、XML模板引擎、动态数据缓存、多项目的支持以及对企业级开发和部署的支持。并且在可维护性、安全性、可移值性以及可扩展性方面都有很好的表现。只有在使用FCS进行项目开发过程中才能充分体会到FCS的更多特性。
面向对象和MVC模式
面向对象是FCS框架的实现基调,除了个别必须的公共方法之外(比较频繁使用的方法,为了调用简单考虑),框架的全部文件都采用类的形式实现,为以后的维护和扩展带来了方便。整个应用系统采用单一入口方式访问,其它组件和类库被有效的封装到一个安全的地方,甚至无法通过WEB浏览器访问到,只有入口程序和模板文件在WEB目录下面。
因为采用了面向对象的开发方式,FCS系统的可维护性、可扩展性和可移植性方面表现都非常出色。
和很多应用框架一样,FCS也采用了MVC模式,但是在实际过程中,做了些调整,控制器由应用控制器和Action控制器类(和App并无继承关系)构成,Dao和Vo类库实现了模型,模板则实现了视图的概念。并且系统的控制部分和模型部分被更安全地封装起来,放到WEB无法访问的路径下面。
命名空间和国际化支持
FCS的所有类库引用采用命名空间的方式,以保证类库的唯一性。在应用开发的时候不需要使用传统的include 或者require 指令,取而代之的是使用 import方法(为了考虑.Net的开发人员,另外Import方法还有个别名using),import方法导入的根目录是系统的类库目录 LIB_DIR。只要遵循命名规范,类库的导入和使用就显得方便有效,如
Import(“FCS.util.ListIterator”);
Import(“com.liu21st.index.Vo.UserVo”);
Import方法支持多个文件引入和子目录引入
Import(“com.liu21st.index.Vo.*”);
Import(“com.liu21st.index.* ”);
但是系统不推荐使用子目录引入的方式,因为如果目录下面文件较多会给系统带来较大的目录遍历开销。
注意:在Unix或者Linux主机下面是区别大小写的,所以在使用import方法或者using方法的时候要注意目录名和类库名称的大小写,否则会引入文件失败。
由于命名空间设计的局限性,在命名目录名称的时候不能使用 “.” 符号,否则会转换成 “/” 符号导致文件引入失败。
由于命名空间设计的局限性,在命名目录名称的时候不能使用 “.” 符号,否则会转换成 “/” 符号导致文件引入失败。
系统对国际化的支持比较良好,支持语言包功能,您可以定制你需要的语言提示信息。
系统在启动应用的时候会检查当前用户的浏览器接受的语言,并会尝试在语言文件目录下面寻找该语言包定义文件,如果不存在则会采用默认的语言文件。
在检查到正确的语言后,系统会调用setlocale方法设置本地化支持(包括对时间、数字和货币的本地化支持)。
系统默认语言是简体中文,语言文件采用常量定义,您可以方便地扩展其它语言包文件。
Lang目录下面的语言文件属于系统语言包,如果您的项目也需要定义语言包,请在Lang目录下面建立相应的项目名称(APP_NAME)目录,并放置相应的语言包文件。
兼容PHP4和PHP5
这是FCS框架最主要的特色之一,FCS框架的实现是和环境和数据库无关的。系统在实现的过程中充分考虑了PHP4的环境(要求的PHP版本是4.3.0以上),并且在不牺牲性能的前提下模拟的部分PHP5的实现方法,最大程度地保证了系统在运行过程中在PHP4下表现出的出色性能和在PHP5下优势的充分发挥。
由于先天的缺陷,PHP4的面向对象机制不够完善,很多只有PHP5才能完成的面向对象特色如Interface、访问控制、Abstract、Final等在PHP4下无法运行,但是在有可能的情况下在其它方面作出了一定程度的PHP5特性模拟。
首先在FCS框架的基类Base类中实现了只有PHP5才支持的架构函数__construct()和析构函数__destruct(),并且对PHP5作了更大程度的支持,在PHP5环境下进行应用开发显得更加方便和便捷,例如魔术函数的实现增强了应用开发的容错性和自我完善性。非常明显的一个例子就是在PHP5环境下面,所有FCS基类库的引用都不必手动加载,由__autoLoad()方法自动加载。另外一个情况就是__set()和__get()方法的实现,可以避免在定义数据对象的时候书写枯燥的get和set方法(因为数据对象都是Public的,并且__set()和__get()方法首先判断对象的属性是否存在)。
其次,系统模拟了一些PHP4中没有的而又是非常需要的方法和类库,包括property_exists()、array_combine()等方法和ListIterator和ArrayList、HashMap等类库,某些类库是SPL中才有实现。
框架的基类库都基于Base扩展,这样充分保证了系统的兼容性。
自动编码转换和utf-8支持
框架的文件全部采用UTF-8编码格式(为了更好的支持扩展,您以后的应用组件也应该遵循该规范),您可以配置输出的页面编码格式,如gb2312等(默认采用UTF-8输出)。系统根据配置文件中设置的编码格式自动对页面进行编码转换,支持iconv和mb_string两种方式,为了提高效率,如果系统的模板编码设置和输出编码设置项相同,则不会进行编码转换。
模板引擎
FCS内置了一个性能卓越的模板引擎,是一个使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自定义标签库,利用该模板引擎可以方便地定义模板文件,从而达到快速开发的目的。
FCS内置模板引擎的的模板标签有两种类型:第一种是普通标签,类似于Smarty的模板标签,在功能方面作了部分简化,增强了显示功能,弱化了逻辑控制功能;第二种是XML标签库形式,该模板技术是新版(0.8版本以上才支持)新增的标签技术,有效地借鉴了Java的标签库技术,在控制功能和各方面都比较强大,而且允许自定义标签库,是新版FCS系统引入和推荐的模板标签技术。两种标签方式的结合使用,可以让您的模板定义功能相当强大。
FCS架构的设计中模板和程序完全分离,一套模板文件就是一个目录,模板是标准html文件(可以配置成其它后缀,如.shtml,.xml等),可以单独预览。
系统会在需要显示的过程中动态加载模板文件,并编译该模板文件,生成一个模板缓存文件,下次会自动检测该模板是否变更过,如果在缓存有效期之内并且模板没有改动过的话,系统就不会再次重新编译模板,而是直接读取编译过的缓存模板文件,编译过的缓存模板文件一旦包含之后就可以直接显示变量的值。所以,缓存模板中的显示内容依然是动态的(除了个别系统特殊变量的输出采用静态输出,因为其值比较稳定),而并不是一个静态的输出,如果您的应用需要采用静态文件输出,请设置启用静态文件功能,系统会读取静态文件输出,并且,还可以设置静态文件的有效期。
由于使用了模板动态缓存技术,在您第一次运行某个模块的某个操作时候,对应的模板文件就会被缓存,下次读取的时候,无论是模板文件修改或者是缓存文件被删除,系统都会重新生成缓存文件。你可以设置模板缓存的有效时间间隔,如每隔10分钟重新读取模板文件。模板动态缓存只是让您免去每次重复编译模板的时间,数据的动态缓存在后面有详细的解说。
异常和错误处理
FCS对异常处理的支持是完全的,无论是在PHP4或者PHP5环境下,您都可以使用Throw_exception方法来抛出异常(默认抛出FcsException异常,你可以指定抛出的异常类型),框架集成了AppException方法和AppError方法来处理异常和错误,如果设置为非调试模式的话,抛出异常和错误的结果是定向到一个指定的错误页面,对于用户来说更友好些。
系统的FCSException类是所有异常类的基础类,其它模块的异常处理类应该在该基础类上扩展。该类的实现进行了版本判断,如果在PHP5下面则FCSException类本身也是继承Exception类,否则就实现了一个模拟的异常类,这个要归功于PHP的debug_backtrace方法,是它让异常处理的PHP4实现成为可能。
默认Throw_exception方法只能抛出系统异常,如果您要使用Throw_exception方法来抛出自己扩展的异常处理,请添加$type参数来指定需要抛出的异常类型,如:throw_exception(‘用户信息错误’,’UserException’)。
抽象数据库访问层
FCS自带的抽象数据库访问层支持多种数据库,并且可以很方便地扩展。目前系统支持的数据库包含有MySQL、MySQLi、PgSQL和Oracle,打算提供支持的还有ODBC等,您可以根据我们的驱动规范来开发自己的数据库驱动类库。
通过数据库公共类库Db来访问底层数据库操作,或者可以通过封装的Dao数据访问对象来操作数据库。
实现了简单的OO-RDMS Mapping 。
充分支持PATHINFO
对搜索引擎友好的充分支持,框架会把所有的GET方式传值转换成PATHINFO形式,并且会把PATHINFO参数转换成GET数组变量,让您可以保持以前的传值和链接形式,转换的工作由框架来完成。您还可以关闭PATHINFO形式,甚至框架还支持你对PATHINFO地址的自定义格式,让你的URL地址富有创造性;
系统支持多种方式的PATHINFO地址,您可以根据应用的要求灵活地选用何种方式。
普通模式:?m=moudule&a=action&id=2
第一种:/m,module/a,action/id,2/
第二种:/m=module,a=action,id=2/
第三种:/module/action/id/2
系统默认采用第三种方式(FCS0.7以上版本默认)。还可以设置不同的分割符,
例如:把PATH_DEPR的值设置为 : 那么您的URL看起来会象下面的效果
http://<serverIp>/var1:val1/var2:val2/var3:val3/
PATHINFO技术对以往的编程方式没有影响,因为GET 和POST方式传值依然有效,因为系统对PATHINFO 方式是自动处理,会把类似 ?m=moudule&a=action&id=2 的URL地址重新转换为/module/action/id/2 或者你设置的格式。
不同的是在由于因为模拟了目录,所以在模板页面中对当前目录下面的连接处理不当可能会导致失效。如果你的系统不支持PATHINFO方式,或者你依然不打算采用PATHINFO方式,那么可以在项目配置文件中把URL_MODEL的值设置为0就可以使用传统模式了。
系统日志和调试
实现了简单的日志记录类,通过Log::Write($errorStr) 方法来记录系统日志,包括系统异常和错误信息,您可以随时查看日志文件。日志文件分为SystemErr.log 和 SystemOut.log 。前者主要用于记录系统异常,通常为抛出异常或者捕获严重错误后自动记录,后者主要用于调试信息和页面的一些非严重错误记录,调试信息一般为systemOut方法写入。
在系统的调试模式中,可以很方便在在错误调试页面跟踪错误,系统的所有异常和错误都会记录到系统日志中,在应用实施后,您可以关闭调试模式,这样系统就不会自动完成日志记录,除非你自己触发日志写入。
系统对每个项目单独记录日志,所以查看的时候请注意定位到某个项目目录下。
如果您的应用组件需要记录特殊的日志,也可以调用(或者扩展)该方法来完成。
项目部署和协作开发
FCS框架为企业级的部署和开发提供了方便。
首先,FCS框架无需安装,仅仅需要上传就可以了,而且支持PHP4和PHP5,为了做到框架的通用性,在系统的核心设计上基本上没有使用特殊的函数和类库(因为某些特殊需要个别地方对PHP4不支持的函数作了模拟实现),并作了一定程度的PHP5模拟,让框架在PHP4下没有牺牲太多的性能,而且运行顺畅。
FCS系统目录可以传到服务器的任何位置,例如 C:/FCS 或者 /User/Local/FCS
WebApps目录传到你需要访问的WEB目录下面,由于FCS系统的架构特点,如果你有多个网站应用系统基于FCS框架构建,那么你不需要设置多个网站目录,因为每个网站应用都采用单一入口(也就是说一个网站就只有一个入口文件,模板目录也是公用的,而且并不会相互影响),当然,由于其它原因(如由于不同域名的关系或者要放到不同的服务器)您仍然可以分开多个目录存放,这个并没有影响。
其次,系统无需任何配置修改就可以运行,让你的应用部署更加简单,当然,作适当的满足你需要的调整,可以让应用变得更实际。框架是简单的,但是可以构建复杂的应用。
新版的FCS框架把系统目录和网站目录分离,完全可以做到更安全的部署应用,您可以把FCS系统目录放到非WEB访问目录下面,以保障应用的代码安全。新版类库的设计更加满足企业级应用开发中的协作和分布式开发的需要。每个项目、每个模块都独立目录,可以达到方便地集成。网站目录下面只有应用的首页文件,而且其中并没有任何业务逻辑处理,纯粹是系统应用的调用和初始化。也会项目的迁移提供了便利。
不同应用项目的应用类库放在FCS系统目录的Lib目录下面
Lib目录下面的FCS目录为基类库,可供各个项目调用。每个应用项目可以在Lib目录建立相应的命名空间,如:com.liu21st.App1、Com.liu21st.App2(实际的文件存放可能就是在Lib目录下面的com/liu21st/App1和com/liu21st/App2。)各个项目的类库之间也可以相互调用,如:
Import (“com.liu21st.App1.Dao.UserDao”)
Import (“com.liu21st.App2.Util.common”)
这样做的目的是为了防止项目之间的冲突,当然你或许想直接用项目名称来区分不同的项目,那么也没有问题,只要项目没有重名,你可以使用App1、App2的方式。
Import (“App1.Dao.UserDao”)
Import (“App2.Util.common”)
FCS支持分布式的开发和团队合作开发,体现在可以实现项目分布开发和模块分布开发,对于调试工作没有影响,最后项目整体完成后再统一集成。每个项目包是一个独立的目录,项目包下面的每个模块又相互独立,因此,协作和集成都很容易完成。每台开发服务器上面只要有FCS框架本身的基类库和框架文件就可以进行应用开发和测试工作。
基于FCS框架进行应用开发,开发人员只需要关注应用类库,所有的后台编码全部都集中(并且大部分情况下只有)在应用类库上面,在进行测试的时候需要模板文件的配合,模板文件的制作参考后面的模板指南。开发过程中涉及到的应用类库有几种区别,详细参考后面的开发指南。
同时,FCS框架还为同时并发多个项目提供了良好的支持,主要表现在:
每个项目分配不同的入口文件,容易部署;
每个项目有单独的配置文件,相互独立,互不影响;
每个项目的缓存文件和静态文件相互独立,更改和调试互不影响;
每个项目可以单独定制各自的语言包,不会冲突;
每个项目有独立的类库目录,分工协作更加方便;
每个项目的系统日志有单独目录,互不影响;
- 面向对象的PHP开发框架FCS教程[1] 框架基础
- 面向对象的PHP开发框架FCS教程[2] 目录结构
- FCS面向对象开发框架相关FAQ
- IOS开发教程-01-IOS程序框架认识、XCode基础了解、MVC面向对象设计
- 轻量级PHP框架——FCS
- PHP简明教程-面向对象基础 1
- 基于消息队列的面向对象开发框架
- 面向对象的C语言开发框架:Nesty
- PHP简明教程-面向对象基础 2
- PHP框架开发教程(一) 开发前的准备
- DotNet面向对象开发框架规划
- 面向对象WEB开发框架:ECHO2 卷土重来
- js面向对象组件开发框架
- php面向对象教程1
- php面向对象的基础
- PHP面向对象的基础
- PHP面向对象开发基础与实例
- PHP框架开发教程(二) 文件分布
- Linux指令大全
- FCS面向对象开发框架相关FAQ
- 《The Linux MTD, JFFS HOWTO》的背景知识
- struts的驱动(struts in action)chapter 1
- 如何根据用户权限屏蔽或显示SAP的订单中的成本显示
- 面向对象的PHP开发框架FCS教程[1] 框架基础
- anjuta的基本使用方法(包括如何设置MYSQL)
- FCS相关介绍
- 最近有些懒
- DomainModel之持久化
- 面向对象的PHP开发框架FCS教程[2] 目录结构
- Linux下软件安装详解
- 一场雷雨、几桩童趣
- [算法]求最大公约数的算法