php程序分纯的MVC模式,还有所谓过程化的框架,帝国cms和discuz所于过程化的框架,而shopnc属于纯MVC模式。
要说哪个好,还真很给判断各有各的优点吧。
过程化的好处是灵活,即可以用mvc模式的风格写一个类进行继承来写程序,也可以打破传统来个过程化的,所以感觉过程化天马行空,你愿意用啥就用啥,而mvc模式易判断给维护,很容易扩展,其实mvc中也可以有过程化的写法,如vop的写法即面向切面。
不管是哪种其实都是在玩url判断,
这是一个url判断,入口文件是fourm.php然后在此入口中最上面先引入两个类文件
require './source/class/class_core.php';
require './source/function/function_forum.php';
这两个类是discuz的核心,它引导不同的参数进入不同的页面,举例来说,如discuz的http://127.0.0.1/bbs/forum.php?mod=viewthread&tid=8其中mod=viewthread当核心文件获得这个参数后就会寻找相应的方法
最下面加载require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';
即要加载
require DISCUZ_ROOT.'./source/module/forum/forum_viewthread.php';
这个文件相当于mvc模式的业务逻辑页面,里面无非是关于viewthread显示页面中的一个数据库提取的数据,所以读到此就需要数据库提取的一些方法,对于一个成熟的框架来说,sql安全很重要,比如要防止sql注入,这样系统就要读取数据库的方法,如DB这个类,还有C类
class C extends core {}
class DB extends discuz_database {}
这也是该框架的核心,所以对于美工来说仿造一个网站就要找对相应页面的业务逻辑文件然后可以修改自己要的东西,帝国cms类似就不多说了。
再说说shopnc,通过入口文件中的它include('shop/index.php');跳转到文件页面
然后入口文件引入三个文件
if (!@include(dirname(dirname(__FILE__)).'/global.php')) exit('global.php isn\'t exists!');
if (!@include(BASE_PATH.'/control/control.php')) exit('control.php isn\'t exists!');
if (!@include(BASE_CORE_PATH.'/33hao.php')) exit('33hao.php isn\'t exists!');
其中
33hao.php
里面有这三句话
require_once(BASE_CORE_PATH.'/framework/libraries/queue.php');
require_once(BASE_CORE_PATH.'/framework/function/core.php');
require_once(BASE_CORE_PATH.'/framework/core/base.php');
这些都是shopnc框架中的核心方法如
core.php
文件里有一个run()方法,这个方法就是入口文件最后加载的
而这一方法中运行了三个方法
public static function run(){
self::cp();
self::init();
self::control();
}
至此shopnc的框架主要轮廓浮出水面。
其中control是路由控制器,它控制url中的参数怎么走,而model主要是加载数据库,view是加载模板。
再说说view加载数据的情况。shopnc中的模板里面是没有帝国cms那种可以写一个sql,然后foreach这种情况的,它主要是在control中sql出数据表中的数据,即抛出变量,然后模板用数组的方法接收。