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); }
在这种情况下,使用简短的命名有助于减少打字量,同时保持代码的可读性。