我一直在学习PHP,发现人们对命名方式有很多不同的看法,我希望至少自己能够保持一致。
在哪些地方应该使用驼峰式命名,在哪些地方应该使用下划线命名?
想法:
变量/属性:
$userid
或$user_id
或$userID
类:
MyCustomClass
或myCustomClass
函数/方法:
my_custom_function()
或my_Custom_Function()
感谢任何想法。
我一直在学习PHP,发现人们对命名方式有很多不同的看法,我希望至少自己能够保持一致。
在哪些地方应该使用驼峰式命名,在哪些地方应该使用下划线命名?
想法:
变量/属性:$userid
或$user_id
或$userID
类:MyCustomClass
或myCustomClass
函数/方法:my_custom_function()
或my_Custom_Function()
感谢任何想法。
来自PSR基本编码规范 (https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md)
类名必须采用StudlyCaps (即PascalCase)。
类常量必须使用全部大写字母和下划线分隔符声明。
方法名必须采用camelCase。
本指南有意避免了对$StudlyCaps、$camelCase或$under_score属性名称的任何推荐。
<?php
namespace Vendor\Model;
class Foo
{
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
private $StudlyCapsProp = null;
protected $camelCaseProp = null;
public $under_score_prop = null;
public function fooBar()
{
}
}
(get_by|getBy)($field, $value)
,那么 $field 将会是用户名或电子邮件的形式。在创建类时,这些字段都需要使用 ucfirst
进行转换。如果我通过 __call
动态提供这些字段,那么每次都需要将驼峰命名法转换为以小写字母开头的字符串,而使用蛇形命名法则只需将其附加到字符串末尾即可,一一对应且无需进行转换或太过担心它是在字符串的开头还是结尾。例如将两个字段(如操作和字段)映射到一个类成员:
与:
相比,蛇形命名法默认保留标记的原始形式,而如果不这样做,则通常更容易单独转换已经分离的词语。
在 PHP 中,使用元编程来充分利用它非常常见,这将包括相当数量的基于字符串的运行时多态性。您很可能最终会遇到一种情况,您希望使用蛇形而不是驼峰来动态编码。
如果驼峰命名法真的那么好,每个人都会像这样在 Stack Overflow 上回答编程问题。但是你可以看到,除了最短的短语之外,对于任何东西而言,简写形式很快就会变得令人疲倦。在编程中,由于其量是小剂量且淹没在空格的海洋中,通常可以逃避这种情况。另一个烦恼是当您有缩写或单词缩写语时,它并不总是有效。
从语义上讲,人们也倾向于使用蛇形来命名空间,并且不会与短语使用蛇形。相反,驼峰往往用于按顺序阅读的小短语或句子,或作为标题。这在面向对象编程(OOP)中特别常见,其中类名往往提供第一个和最常需要的分类层,今天越来越允许嵌套命名空间(在 PHP 中完全支持)。如果您正在按类别做某些事情,即组合来自不同类别集的单词而不是组合英语中的单词以创建短语,则约定使用蛇形。在这种情况下,您更可能使用元编程。
例如,database_statement_row_read_next()
不完全是一个有效或典型的英语短语。但是最终 Database\Statement::readNextRow
变成了一个有效和标准的英语表达式。
虽然英语更舒适和熟悉,但它也存在某些问题。事物并不总是以相同的顺序或方式说出来(不一致),这可能使得在元编程方面更加尴尬,因为自然而然地需要处理单词集并将它们组合在一起他们没有告诉你的是,按照惯例,你几乎总是需要遵循英语语法规则来编写camel命名,但在某些情况下不一定适用于分类命名。
get_by_username|get_by_email
。我可能会决定始终使用 [$operation, $field]
。操作和字段可能需要用多个单词来描述。这可能导致在字段和操作上都使用驼峰命名法,但在字段和操作之间使用蛇形命名法进行分隔。例如,getBy_username
,deleteBy_username
或getBy_firstName
。虽然不太美观,但可以说是有实际用途的。通常也很常见地以蛇形作为命名空间的开头,然后以驼峰结尾,这基本上就是使用 OOP 命名空间、类和方法所得到的结果。如果有充分的理由混合使用它们也不算错,但经常混用这些风格则往往是糟糕的代码气味,就像让你走进了一个还没冲洗的马桶里。根据我们使用的框架,命名规则可能不同。我们应该遵循开发应用程序所使用的框架遵循的命名约定。
每个框架都遵循不同的命名约定。例如:
所以:使用您的框架或创建自己的命名约定。
但是对于PHP开发人员的基本命名约定,我发现可以采用以下方式。
对于变量:
我们可以使用小写下划线。例如:
$first_name = "John";
$last_name = "Doe";
大多数PHP开发者和框架(如LV)使用这种命名约定,WordPress也使用这种命名约定声明变量。
对于常量
我们可以使用全大写字母。例如:
define('DB_HOST', 'localhost');
define('DB_USER', 'db_user');
大多数PHP开发者、框架和CMS使用这种命名约定来声明PHP常量。
对于类名
我们可以使用帕斯卡命名法。例如:
class UserDetails {
//
}
(PHP框架如LV使用此约定,许多PHP开发人员使用此命名约定。)
对于函数和类方法名称:
我们可以使用驼峰式命名法。例如:
function getName() {
// Do something
}
(像LV这样的PHP框架使用这种规则,许多PHP开发人员也使用这种命名规则。)
注意:但WordPress使用小写下划线来声明函数。
function get_name() {
// Do something
}
您可以在此处获取更多详情。
yii_instructor(){}
比yiiInstructor(){}
更易读。 - MaXi32