命名规则
2016-04-12 13:15
253 查看
命名是程序规划的核心。古人相信只要知道一个人真正的名字就会获得凌驾于那个人之上的不可思议的力量。只要你给事物想到正确的名字,就会给你以及后来的人带来比代码更强的力量。
名字就是事物在它所处的生态环境中一个长久而深远的结果。总的来说,只有了解系统的程序员才能为系统取出最合适的名字。如果所有的命名都与其自然相适合,则关系清晰,含义可以推导得出,一般人的推想也能在意料之中。
就一般约定而言,类、函数和变量的名字应该总是能够描述让代码阅读者能够容易的知道这些代码的作用。形式越简单、越有规则,就越容易让人感知和理解。应该避免使用模棱两可,晦涩不标准的命名。
变量、函数名一律为小写格式;
以标准计算机英文为蓝本,杜绝一切拼音、或拼音英文混杂的命名方式;
变量命名只能使用项目中有据可查的英文缩写方式,例如可以使用 $data 而不可使用 $data1、$data2 这样容易产生混淆的形式,应当使用 $trade、$product 这样一目了然容易理解的形式;
可以合理的对过长的命名进行缩写,例如 $bio($biography),$tpp($threadsPerPage),前提是英文中有这样既有的缩写形式,或字母符合英文缩写规范;
必须清楚所使用英文单词的词性,在权限相关的范围内,大多使用 $allowXxx 或 $isXxx 的形式,前者后面接动词,后者后面接形容词。
变量名标识符不应当使用下划线“_”进行分割,函数名根据需要可按照模块单元名称使用下划线添加前缀,以实现命名空间的效果。但每个函数名标识符尽量避免出现三个以上的下划线。
类和接口的命名采用混合大小写字母的Pascal命名法
具体描述为:首字母大写,后续的每个单词也需要大写首字母。如:MySQLConnector、CacheProvider。
接口的命名与类相似,但需要以大写字母“I”开头,以作区分。
对象成员的命名则采用混合大小写字母的Camel命名法
具体描述为:公有成员及保护成员应首字母小写,后续的每个单词首字母大写
私有成员除需保持共有成员的命名方式外,还需要以下划线“_”开头,以作区分。
JavaScript中类和全局对象应使用混合大小写字母的Pascal命名法
具体描述为:首字母大写,后续的每个单词也需要大写首字母。如:MySQLConnector、CacheProvider。
JavaScript中变量、函数名应采用混合大小写字母的Camel命名法。
具体描述为首字母小写,后续的每个单词首字母大写
常量应该总是全部使用大写字母命名,必要的情况下,可使用划线来分隔单词;
PHP 的内建值 true、false 和null必须全部采用小写字母书写。
任何变量在进行累加、直接显示或存储前必需进行初使化 ,例如:
判断一个无法确定(不知道是否已被赋值)的变量时,可用empty()或isset(),而不要直接使用if($switch)的形式。
empty()和isset()的区别为:请参阅PHP手册。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节(“\0”)并不等同于 PHP 的 NULL 常数。
判断一个变量是否为数组,请使用is_array(),这种判断尤其适用于对数组进行遍历的操作,例如foreach(),因为如果不事先判断,foreach()会对非数组类型的变量报错;
判断一个数组元素是否存在,可使用isset($array['key']),也可使用empty()
PHP中的变量不并不像C语言那样需要事先声明,解释器会在第一次使用时自动创建他们,同样类型也不需要指定,解释器会根据上下文环境自动确定。从开发人员的角度来看,这无疑是一种极其方便的处理方法。一个变量被创建了,就可以在程序中的任何地方使用。这导致的结果就是开发人员工经常不注意初始化变量。因此,为了提高程序的安全性,我们不能相信任何没有明确定义的变量。所有的变量在定义使用前要初使化以防止恶意构造提交的变量覆盖程序中使用的变量。
不要相信任何客户端提交的数据是安全的。(包括:$_GET、$_POST、$_COOKIE、$_FILES、$_SERVER、$_REQUEST)
表和字段的命名以PHP编码中的命名规范为基本准则。
所有数据表名称,只要其名称是可数名词,则必须以复数方式命名,例如:ims_members(用户表)、ims_rules(规则定义表);
存储多项内容的字段,或代表数量的字段,也应当以复数方式命名,例如:params(parameters,参数个数)、views(查看次数)、replies(回复次数)。
当几个表间的字段有关连时,要注意表与表之间关联字段命名的统一,如 ims_rule_keywords表中的rid与ims_rules表中的rid。
代表id自增量的字段,通常用以下几种形式:
最常用的核心id,或经常在URL中进行调用的,尽量用简写的形式,例如rid、weid、uid;
有功能性作用,URL中偶尔用到的id,使用全称的形式,例如pluginid;
没有功能性作用,只为管理和维护方便而设的id,可以使用全称的形式,也可只将其命名为id。
所有与表、字段相关的命名,请参考微擎系统现有字段的命名方式,以保证命名的系统性和统一性。
基于效率的考虑,所有字段均不能为空,即全部NOT NULL,可以设置默认值来代替。
预计不会存储非负数的字段,例如各项id、统计数等,必须设置为UNSIGNED类型。UNSIGNED类型比非UNSIGNED类型所能存储的正整数范围大一倍,因此能获得更大的数值存储空间。
储开关、选项数据的字段,通常使用tinyint(1)非UNSIGNED类型,少数情况也可能使用enum()结果集的方式。tinyint作为开关字段时,通常1为打开;0为关闭;-1为特殊数据,例如N/A(不可用),高于1的为特殊结果或开关二进制数组合。
任何类型的数据表,字段空间应当本着足够用,不浪费的原则。MEMORY/HEAP类型的表中,尤其要注意规划节约使用存储空间,这将节约更多内存。
所有SQL语句中,除了表名、字段名称以外,全部语句和函数均需大写,应当杜绝小写方式或大小写混杂的写法。例如select * from ims_members;是不符合规范的写法。
很长的SQL语句应当有适当的断行,依据JOIN、FROM、ORDER BY等关键字进行界定。
通常情况下,在对多表进行操作时,要根据不同表名称,对每个表指定一个1~2个字母的缩写,以利于语句简洁和可读性。
参考PHP编码规范中的数据库操作指南
数值运算一般比字符串运算更快。例如比较运算,可在单一运算中对数进行比较。而串运算涉及几个逐字节的比较,如果串更长的话,这种比较还要多。
如果串列的值数目有限,应该利用普通整型或emum类型来获得数值运算的优越性。
更小的字段类型永远比更大的字段类型处理要快得多。对于字符串,其处理时间与串长度直接相关。一般情况下,较小的表处理更快。对于定长表,应该选择最小的类型,只要能存储所需范围的值即可。例如,如果mediumint够用,就不要选择bigint。对于可变长类型,也仍然能够节省空间。一个TEXT 类型的值用2 字节记录值的长度,而一个LONGTEXT 则用4字节记录其值的长度。如果存储的值长度永远不会超过64KB,使用TEXT
将使每个值节省2字节。
名字就是事物在它所处的生态环境中一个长久而深远的结果。总的来说,只有了解系统的程序员才能为系统取出最合适的名字。如果所有的命名都与其自然相适合,则关系清晰,含义可以推导得出,一般人的推想也能在意料之中。
就一般约定而言,类、函数和变量的名字应该总是能够描述让代码阅读者能够容易的知道这些代码的作用。形式越简单、越有规则,就越容易让人感知和理解。应该避免使用模棱两可,晦涩不标准的命名。
变量、函数名
变量、函数名一律为小写格式;以标准计算机英文为蓝本,杜绝一切拼音、或拼音英文混杂的命名方式;
变量命名只能使用项目中有据可查的英文缩写方式,例如可以使用 $data 而不可使用 $data1、$data2 这样容易产生混淆的形式,应当使用 $trade、$product 这样一目了然容易理解的形式;
可以合理的对过长的命名进行缩写,例如 $bio($biography),$tpp($threadsPerPage),前提是英文中有这样既有的缩写形式,或字母符合英文缩写规范;
必须清楚所使用英文单词的词性,在权限相关的范围内,大多使用 $allowXxx 或 $isXxx 的形式,前者后面接动词,后者后面接形容词。
变量名标识符不应当使用下划线“_”进行分割,函数名根据需要可按照模块单元名称使用下划线添加前缀,以实现命名空间的效果。但每个函数名标识符尽量避免出现三个以上的下划线。
类和接口名
类和接口的命名采用混合大小写字母的Pascal命名法具体描述为:首字母大写,后续的每个单词也需要大写首字母。如:MySQLConnector、CacheProvider。
接口的命名与类相似,但需要以大写字母“I”开头,以作区分。
对象成员的命名则采用混合大小写字母的Camel命名法
具体描述为:公有成员及保护成员应首字母小写,后续的每个单词首字母大写
私有成员除需保持共有成员的命名方式外,还需要以下划线“_”开头,以作区分。
JavaScript代码
JavaScript中类和全局对象应使用混合大小写字母的Pascal命名法具体描述为:首字母大写,后续的每个单词也需要大写首字母。如:MySQLConnector、CacheProvider。
JavaScript中变量、函数名应采用混合大小写字母的Camel命名法。
具体描述为首字母小写,后续的每个单词首字母大写
常量
常量应该总是全部使用大写字母命名,必要的情况下,可使用划线来分隔单词;PHP 的内建值 true、false 和null必须全部采用小写字母书写。
变量的初始化与逻辑检查
任何变量在进行累加、直接显示或存储前必需进行初使化 ,例如:$number = 0; // 数值型初始化 $string = ''; // 字符串初始化 $array = array(); // 数组初始化
判断一个无法确定(不知道是否已被赋值)的变量时,可用empty()或isset(),而不要直接使用if($switch)的形式。
empty()和isset()的区别为:请参阅PHP手册。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节(“\0”)并不等同于 PHP 的 NULL 常数。
判断一个变量是否为数组,请使用is_array(),这种判断尤其适用于对数组进行遍历的操作,例如foreach(),因为如果不事先判断,foreach()会对非数组类型的变量报错;
判断一个数组元素是否存在,可使用isset($array['key']),也可使用empty()
安全性
PHP中的变量不并不像C语言那样需要事先声明,解释器会在第一次使用时自动创建他们,同样类型也不需要指定,解释器会根据上下文环境自动确定。从开发人员的角度来看,这无疑是一种极其方便的处理方法。一个变量被创建了,就可以在程序中的任何地方使用。这导致的结果就是开发人员工经常不注意初始化变量。因此,为了提高程序的安全性,我们不能相信任何没有明确定义的变量。所有的变量在定义使用前要初使化以防止恶意构造提交的变量覆盖程序中使用的变量。不要相信任何客户端提交的数据是安全的。(包括:$_GET、$_POST、$_COOKIE、$_FILES、$_SERVER、$_REQUEST)
数据库设计
表和字段命名
表和字段的命名以PHP编码中的命名规范为基本准则。所有数据表名称,只要其名称是可数名词,则必须以复数方式命名,例如:ims_members(用户表)、ims_rules(规则定义表);
存储多项内容的字段,或代表数量的字段,也应当以复数方式命名,例如:params(parameters,参数个数)、views(查看次数)、replies(回复次数)。
当几个表间的字段有关连时,要注意表与表之间关联字段命名的统一,如 ims_rule_keywords表中的rid与ims_rules表中的rid。
代表id自增量的字段,通常用以下几种形式:
最常用的核心id,或经常在URL中进行调用的,尽量用简写的形式,例如rid、weid、uid;
有功能性作用,URL中偶尔用到的id,使用全称的形式,例如pluginid;
没有功能性作用,只为管理和维护方便而设的id,可以使用全称的形式,也可只将其命名为id。
所有与表、字段相关的命名,请参考微擎系统现有字段的命名方式,以保证命名的系统性和统一性。
字段结构
基于效率的考虑,所有字段均不能为空,即全部NOT NULL,可以设置默认值来代替。预计不会存储非负数的字段,例如各项id、统计数等,必须设置为UNSIGNED类型。UNSIGNED类型比非UNSIGNED类型所能存储的正整数范围大一倍,因此能获得更大的数值存储空间。
储开关、选项数据的字段,通常使用tinyint(1)非UNSIGNED类型,少数情况也可能使用enum()结果集的方式。tinyint作为开关字段时,通常1为打开;0为关闭;-1为特殊数据,例如N/A(不可用),高于1的为特殊结果或开关二进制数组合。
任何类型的数据表,字段空间应当本着足够用,不浪费的原则。MEMORY/HEAP类型的表中,尤其要注意规划节约使用存储空间,这将节约更多内存。
SQL语句
所有SQL语句中,除了表名、字段名称以外,全部语句和函数均需大写,应当杜绝小写方式或大小写混杂的写法。例如select * from ims_members;是不符合规范的写法。很长的SQL语句应当有适当的断行,依据JOIN、FROM、ORDER BY等关键字进行界定。
通常情况下,在对多表进行操作时,要根据不同表名称,对每个表指定一个1~2个字母的缩写,以利于语句简洁和可读性。
参考PHP编码规范中的数据库操作指南
运算与检索
数值运算一般比字符串运算更快。例如比较运算,可在单一运算中对数进行比较。而串运算涉及几个逐字节的比较,如果串更长的话,这种比较还要多。如果串列的值数目有限,应该利用普通整型或emum类型来获得数值运算的优越性。
更小的字段类型永远比更大的字段类型处理要快得多。对于字符串,其处理时间与串长度直接相关。一般情况下,较小的表处理更快。对于定长表,应该选择最小的类型,只要能存储所需范围的值即可。例如,如果mediumint够用,就不要选择bigint。对于可变长类型,也仍然能够节省空间。一个TEXT 类型的值用2 字节记录值的长度,而一个LONGTEXT 则用4字节记录其值的长度。如果存储的值长度永远不会超过64KB,使用TEXT
将使每个值节省2字节。
相关文章推荐
- 不要计算,预测DON’T COUNT, PREDICT
- 工作常见问题汇总
- IIRF重写在asp.net4.0+IIS6中部分失败的解决方案
- 21. Merge Two Sorted Lists && 23. Merge k Sorted Lists
- C#文件操作
- 交换两个整型变量其实并不需要第三者
- Cookie和Session专题
- ToolBar、ActionBar与Menu的纠葛(以及navigationIcon、setHomeButtonEnabled、setDisplayHomeAsUpEnabled)
- 游戏评测表
- 自用,java判断是否闰年
- 04-git远程库克隆
- UVA10025
- 【ZOJ3935 The 16th Zhejiang University Programming ContestI】【暴力 水题】2016 找寻triangular-hexagonal-leap y
- 谈谈关于域名的那些事
- 创建属于自己的网站
- Oracle11g RMAN 丢失归档日志:ORA-19625
- c++作业3
- 【ZOJ3933 The 16th Zhejiang University Programming ContestG】【费用流】Team Formation 最多组队条件下女
- 【程序的流程】—— 顺序 / 分支 / 循环
- MySQL Flush命令用法