PHP编程
如何开始使用 PHP 的替代匈牙利命名法(PAHN)
匈牙利命名法是一种编程语言变量命名约定。自1999年匈牙利的查尔斯·西莫尼(Charles Simonyi)提出该命名法以来,许多人尝试将其应用于各种新的编程语言。匈牙利命名法不仅有助于理解变量的用途,还可以指明变量内部预期的数据类型。
对于 PHP,PHP 替代匈牙利命名法(PAHN)是基于匈牙利命名法的一种简化版本,并且考虑到 PHP 语言与西莫尼使用的语言之间的差异。
优势
-
提高可读性
通过为变量采用与函数、类方法或类变量不同的命名约定,可以帮助提高代码的可读性,避免混淆。例如,避免将变量与函数调用混淆。 -
帮助其他程序员理解意图
使用命名约定可以让其他程序员快速理解变量的用途。 -
保持一致性
采用像 PAHN 这样简单且易学的标准,可以确保多个团队成员的代码风格一致,避免一个成员使用一种变量命名约定,另一个成员使用另一种。 -
解决命名标准的缺乏
PHP 基于变量命名约定的标准较少,PAHN 提供了一个参考文档,方便大家共同遵循。 -
区分不同类型的变量
比如$sMemberID
表示可能是字母数字的 ID,而$nMemberID
表示整型 ID。使用命名约定可以提升代码可读性。 -
改善代码的可读性
例如,$NamesArray
可能让人不确定它是包含Names
对象的数组,还是包含Names
字符串的数组。使用命名约定后,可以通过$asNames
来明确表示是Names
字符串的数组。
指南
PAHN 变量命名约定的前缀由一系列字符组成,后接一个标准大小写的变量名。例如:
global $gasNames;
$gasNames = $Members->getNames();
在这个例子中,$gasNames
代表的是一个 global(全局)+ array(数组)+ string(字符串)的变量。
常用前缀
_
= 私有类变量a+
= 数组(通常与数组内的数据类型结合)c+
= 字符s+
= 字符串o+
= 对象d+
= 日期对象(如date()
或gmdate()
返回的结果)v+
= 变体(非常少用,表示任何可能的变量类型)i+
= 整数f+
= 浮动点数n+
= 数字(不确定是浮动点还是整数,使用时要谨慎)x+
= 表示这是一个按引用传递的变量rs+
= 数据库记录集(行集)rw+
= 数据库行h+
= 句柄(如数据库句柄、文件句柄等)hf
= 函数句柄(如setRetrievalStrategy(callable $hfStrategy)
)t+
= 线程化对象(表示该对象可以安全地在线程之间调用或传递)g+
= 全局变量(使用时要谨慎,通常与变量的类型结合)b+
= 布尔值
示例
$oMember
-- 一个Member
对象$hFile
-- 文件句柄,例如通过fopen()
传递的句柄$cFirst
-- 从字符串中提取的第一个字符$rsMembers
-- 从数据库表返回的Members
记录$rwMember
-- 从数据库中获取的单个Member
记录$bUseNow
-- 布尔标志$sxMemberName
-- 按引用传递的字符串变量,表示成员名称$nCounter
-- 数字计数器$dBegin
-- 起始日期$sFirstName
-- 表示某人名字的字符串$_hDB
-- 存储数据库连接句柄的私有类变量(通常通过$this->_hDB
访问)
对于类变量名,PAHN 不使用这些前缀。例如,你可能会看到类似以下的代码:
$Members = new Members();
对于常量,PAHN 只使用大写单词,如 MEMBER
,并且通常只在 PHP 替代语法(CCAPS)中插入变量。
变量命名的其他规则
-
使用标准大小写(ProperCase)
例如,$sMemberName
应该使用标准大小写,而不是$sMEMBERNAME
、$sMember_Name
或$smemberName
。这样可以避免将变量误认为常量(通常常量是大写的)。$sMember_Name
和$s_Member_Name
增加了不必要的打字工作,而$smemberName
则使变量名变得混淆。 -
少数特殊情况
在一些特殊情况下,添加下划线会提高可读性,例如使用首字母缩写(如 FIFO)时,$bFIFO_Indicator
比$bFIFOIndicator
更容易理解。 -
循环迭代器的例外
对于循环迭代器变量,通常使用简短的变量名(如$i
、$x
、$y
等),这不仅节省了打字,还能提高代码的简洁性和可读性。例如:$asMemberNames = array(); for ($i = 1; $i <= 10; $i++) { $asMemberNames[$i-1] = $Member->getMemberByID($i); }
在这种情况下,使用简短的命名有助于减少打字量,同时保持代码的可读性。