3.1 开发规范
“无以成规,不成方圆”。为了提高开发程序的兼容性,特此制订以下几点使用DoitPHP进行程序开发的规则。
一、项目目录命名规则
项目目录命全部为小写字母。
二、数据表命名规则:
数据库中数据表的命名将全部采用小写字母。
三、控制器(Controller)文件的开发规则:
namespace controllers;
use doitphp\core\Controller;
class IndexController extends Controller {
public function indexAction() {
echo 'hello world';
}
}
1、Controller文件的命名采用驼峰命名法则。如:建立index的controller文件,其名字为IndexController.php。
注:index首字母要大写,后再加上Controller,注意这个Controller也是首字母大写的。之所以加controller是因为便于表明这个文件是controller文件。
2、Controller文件名字和内容中类的名字相同(字母大小写也一致的相同)。如上面代码所示,IndexController.php的内容类的名字按照此规应为:IndexController。
3、这里之所以继承Controller是因为Controller 类中有好多常用的类方法。在这里继承下来(extends Controller),是为了便于在接下来的开发中使用这些类方法。
4、Controller文件内容中的function(类方法),只有用于URL所调用的function其名字后加上Action(注:首字母要大写)。
如网址:http://www.doitphp.com/index.php/index/helloworld (http://www.doitphp.com/ 为doitphp项目目录的访问网址, 注:关于URL的路由规则此后有详细的讲述)中所调用的controller为IndexController,所调用的action为:helloworldAction。注意的是:这里的helloworld要全部为小写(在方法命名上则不遵守驼峰命名法则。原因:为了和URL保持一致,URL网址通常都是小写字母)。所以这个例子的代码为:
namespace controllers;
use doitphp\core\Controller;
class IndexController extends Controller {
public function helloworldAction() {
}
}
注:在class IndexController里如果不是用来URL所调用的类方法(function),命名规则就非常随意了,可以后面不加Action(注:不是可以不加Action,是绝不能加!加了程序虽不报错,可规则上不允许。只有被URL调用的类方法才可以加Action,为的是保护这些非URL调用的类方法的代码安全)。非URL调用的类方法访问权限建议不要使用public应该使用protected。
5、上面的控制器(Controller)文件开发规则,只适用于controllers目录下(非子目录)的控制器文件。对于controllers子目录下的控制器文件,文件命名规则略有不同。控制器类的命名中下划线("_"),则代表文件路径分割符("/")。举例说明下:控制器类名:Admin_membersController,则此控制器文件在admin子目录下,文件名为MembersController.php,文件内容和则和上面规则一样。
行为标签:不难发现从上面控制器文件开发规则(文件命命名、控制器类命名、类方法命名)中,有几个关键词反复出现:Controller, Action。我们把这些旗帜鲜明表现出文件(或类)属性或类别的这些关键词统称为:行为标签。后面的内容中将会遇到更多的行为标签。
四、模型(Model)文件的开发规则:
模型(Model)文件的开发规则类似于控制器(Controller)文件的开发规则。只是把Controller换成Model的区别,读者最好参考上文控制器(Controller)文件的开发规则来理解。
1、Model文件命名采用驼峰命名法则,较之控制器(Controller)类的命名,模型(Model)类的命名中可以含有大写字母,也无需首字母大写。
2、Model文件内容类的名字和文件名要一致。
例:要建一个新Model文件,假设为postList的model文件。文件名字为:postListModel.php内容为:
namespace models;
use doitphp\core\Model;
class postListModel extends Model {
}
3、模型(Model)类方法命名较之于控制器(Controller)类方法命名,无需加行为标签Action,命名规则比较灵活,随心所欲。
注:模型(Model)文件也可以放在模型目录(models)子目录里,只是不建议使用。其具体规则,可以参照上文控制器(Controller)子目录文件开发规则,自己尝试探索一下。
五、挂件(Widget)文件的开发规则:
挂件(Widget)文件的开发规则也是和上文控制器(Controller)文件的开发规则极为类似,请参考前面所讲述过的控制器(Controller)文件的开发规则。先来个例子,上代码。
namespace widgets;
use doitphp\core\Widget;
class mainMenuWidget extends Widget {
public function renderContent($params = null) {
}
}
1、挂件(Widget)文件命名建议采用驼峰命名法则,无需首字母大写(没有此类限制)。
2、挂件(Widget)文件内容类的名字和文件名要一致。
3、挂件(Widget)文件内容类中只有一个类方法:renderContent()。
Widget翻译为挂件(小部件),主要用来解决众页面共享某一功能(页面局部)。如网页头部的主菜单,页尾的版权信息等。一个widget只用来完成一个共享区域页面的处理,所以只需调用一个类方法renderContent()。
六、扩展模块(extensions)开发规则:
扩展模块(extensions)作为调用第三方程序来实现某功能,自然不是单独一个文件,是众文件的集合。所以需要在扩展目录中创建子目录。
下面以一个实例来说明一下具体的开发规则。假设要创建phpmailer的扩展,通过调用phpmailer这个第三方程序来实现邮件的发送。
1、第一步:在extensions目录中新建子目录:phpmailer。
2、第二步:在子目录phpmailer中创建扩展引导文件phpmailerExt.php(文件命名规则:在扩展模块名后加Ext)。内容如下:
namespace extensions;
use doitphp\core\Extension;
class phpmailerExt extends Extension {
}
通过上面文件内容的代码不难看出,类名称和文件名一致(包括字母大小写),继承父类 Extension。
3、第三步,将第三方程序代码放置于子目录phpmailer中(具体路径,随你安排)。
4、第四步,开发扩展引导文件phpmailerExt.php,根据具体的业务需求,添加所需的类方法,总之,通过调用phpmailer这个第三方程序实现发送邮件功能。
待扩展模块phpmailer开发完毕后如何使用,对此后面文档会详细介绍。
七、类文件(library)开发规则:
对于应用目录(application)其子目录library里的类文件开发规则,仅仅只有文件名与类名要相同(包括字母大小写)。因为这样可以实现类文件的自动加载。否则要先进行文件引入,才能调用其代码。
读完上面这些文件的开发规则,你是不是感觉有点晕乎乎?这么多细节,对于初学者记忆起来有点不容易。不必为难,有好的解决办法:使用DoitPHP Tools直接生成,上面那些细节规范压根就需记忆。对于DoitPHP Tools的具体使用方法,且看下文。