跳至内容

PHP 编程/匈牙利命名法变体

来自维基教科书,开放的书籍,开放的世界


如何开始使用 PHP 匈牙利命名法变体


匈牙利命名法 是一种 编程语言变量命名约定。自 1999 年左右,来自匈牙利的查尔斯·西蒙尼 引入这种命名约定 以来,一些人尝试将其适应于各种新的编程语言。它不仅可以帮助人们理解变量的用途,还可以帮助人们理解变量中包含的预期数据类型。

对于 PHP,PHP 匈牙利命名法变体(或PAHN)是基于匈牙利命名法为 PHP 制定命名约定的尝试,但采用更简化的格式,并解决 PHP 语言与西蒙尼当时使用的语言之间的差异。

  • 通过使用与函数、类方法或类变量名称不同的变量命名约定,它有助于使代码更易于阅读,从而避免将变量与函数调用混淆,例如。
  • 它可以帮助其他程序员回到您的项目,理解该变量的意图。
  • 通过坚持像 PAHN 这样的简单标准,它很容易学习,是(许多)使来自多个团队成员的代码看起来相同的措施之一。否则,一个团队成员可能使用一个变量命名约定,而另一个团队成员可能使用另一个。
  • 没有很多关于基于 PHP 的变量命名约定的已发布标准。通过在这里设定一个,这是解决这个问题的一个机会,也是在网络上提供一个中央文档,以便许多人可以参考。
  • 用于模型对象的类变量,例如 $Member,需要比 $nMember 或 $sMember 更突出,例如。使用命名约定有助于提高可读性,以便区分两者。
  • 想象一下,我们想区分 $sMemberID 表示可能为字母数字的 ID,而 $nMemberID 将是一个整数。如果我们使用 $MemberID,你就不会那么容易理解。所以,同样,这种命名约定提高了可读性。
  • 如果我们使用 $NamesArray,它比 $asNames 输入更多。此外,我们不知道 $NamesArray 是一个 Names 对象数组,一个 Names 字符串数组,还是什么。所以,同样,我们可以通过使用这种命名约定提高代码的可读性。

PAHN 变量命名约定以一系列前缀字符开头,后跟 ProperCase 变量名。示例

 global $gasNames;
 $gasNames = $Members->getNames();

$gasNames 将表示全局 + 数组 + 字符串,或全局字符串数组。

前缀是

_ = a private class variable
a+ = array (often combined with the data type used inside the array)
c+ = character
s+ = string
o+ = object
d+ = date object -- as in what's returned from a date() or gmdate()
v+ = variant -- used very infrequently to mean any kind of possible variable type
i+ = integer -- an integer
f+ = float -- a floating point number, e.g. an integer with a fractional part
n+ = numeric (unknown if it's float, integer, etc. Use infrequently)
x+ = to let other programmers know that this is a variable intended to be used by reference rather than value
rs+ = db recordset (set of rows)
rw+ = db row
h+ = handle, as in db handle, file handle, connection handle, curl handle, socket handle, etc.
hf = handle to function, as in setRetrievalStrategy(callable $hfStrategy)
t+ = a threaded object, use to indicate that an object may be safe to call\pass between threads
g+ = global var (and used sparingly, and often combined with the datatype used for the variable)
b+ = boolean

一些示例

 $oMember -- a Member object
 $hFile -- a handle to a file, for instance as passed from the fopen() statement
 $cFirst -- first character retrieved from a string
 $rsMembers -- records of Members, as returned from a database table
 $rwMember -- a single Member record from the database
 $bUseNow -- a boolean flag
 $sxMemberName -- a byref string variable for a name of a member.
 $nCounter -- a numeric counter
 $dBegin -- a beginning date
 $sFirstName -- a string to represent someone's first name
 $_hDB -- a private class variable to store a database connection handle (often addressed by $this->_hDB)

对于类变量名,PAHN 不使用此前缀。因此,您可能会看到类似的东西

 $Members = new Members();

对于常量,PAHN 只使用一个大写单词,例如 MEMBER,这通常只用于在 PHP 替代语法CCAPS 中插入变量。

至于前缀之后的内容,最好坚持使用 ProperCase,如 $sMemberName 而不是 $sMEMBERNAME、$sMember_Name、$s_Member_Name 或 $smemberName。这有几个原因。在 $sMEMBERNAME 的情况下,它意味着该变量应该像常量一样对待(常量通常使用大写字母),而实际上并非如此。在 $sMember_Name 中,它会导致不必要的输入,就像 $s_Member_Name 一样。而 $smemberName 将 s+ 前缀与单词“member”结合在一起,导致变量名令人困惑。现在,也就是说,在某些情况下,添加下划线确实有助于可读性,在这些情况下,它可以与 PAHN 一起使用。此罕见例外的很好的例子是使用缩写,例如 FIFO。因此,$bFIFOIndicator 可能比 $bFIFO_Indicator 更令人困惑,后者更受欢迎。

对于用作循环迭代器的变量,此前缀也有一个例外。许多程序员可能熟悉许多教科书中使用的简短变量:$a、$b、$c、$d、$i、$x、$y、$z。这些非常适合您想要使用一个在循环中寻址并在数组中使用的迭代器变量时。例如

$asMemberNames = array();
for ($i = 1; $i <= 10; $i++) {
  $asMemberNames[$i-1] = $Member->getMemberByID($i);
}

因此,允许此循环迭代器的例外,因为它可以节省输入时间,并且不会降低可读性。


华夏公益教科书