PHP Manual
/
文体和惯例

如何命名变量、函数、方法和类

22. 08. 2019

Obsah článku

为了保持代码的有序性,为我们如何推导出名字选择明确的规则是很重要的。本页是对大量程序员使用的相对流行的方法的概述,包括我自己和与我一起工作的人。

如果你在一个开发团队工作,尽可以使用他们的规则,但对于一般的开发来说,建立一些好的习惯也同样有益。

因为整个PHP语法的概念确实很宽泛,所以我在这里把指南分为许多专业性很强的类别。

如果你正在寻找一个快速解决方案,我建议你学习PSR-4标准

插入脚本,链接到HTML,加载文件

每个脚本必须以<?php标签开始。

如果文件末尾没有HTML,就不应该终止(以防止在页面末尾出现白色字符)。

加载其他文件应遵循以下规则。

  • 如果该文件不是关键的,并且在渲染页面时可以省去(例如,在页脚的附加信息),它应该通过include加载:include 'file.php';
  • 关键文件只能通过require结构:require 'file.php';
  • 如果我们正在处理对象,我们使用require结构来加载自动加载器,它将自己负责加载其他类(大多数框架都实现了这种行为)。

如果至少有一点可能的话,我们应该将数据检索逻辑与HTML渲染分开,即使用MVC模型(模型-视图-控制器)。

所以我们首先在例如Presenter中准备数据。

Presenter.php

$cisla = [1, 2, 3];
$data = [];
$data['数字'] = $cisla; //将数据传给模板
include 'renderCisel.php'; //加载模板

然后把它画在模板里。

renderCisel.php

<table>
<?php
foreach ($data['cisla'] as $cislo) {
echo '<tr><td>' . $cislo . '</td></tr>';
}
?>
</table>

这种方法被大多数框架所采用,对提高代码的清晰度很有帮助。在开发过程的后期,每个有经验的程序员都应该使用这种方法来开发结构清晰的应用程序(对于大型应用程序,这种方法是必须的)。

变量名称

如果一个变量包含一个数组的值或其他对象,它应该以复数命名。

$numbers = [1, 2, 3];

因为这样我们就可以简单地用一个数字来迭代这些值。

foreach ($numbers as $number) {
// 数字处理
}

一个由多个词组成的名字用cameCase语法组合成一个长词,即第一个词以小写字母开始,后面每个词以大写字母开始。

$promenna = '嘿,嘿!';
$seznamUzivatelu = [
'Jan Barášek',
'巴拉克-奥巴马',
'史蒂夫-乔布斯',
'斯蒂芬-沃尔弗拉姆',
];
$maxFilesInDirectory = 12;
$nameOfPhpScript = 'index.php'; // PHP的缩写已经缩小了尺寸

函数和方法名称

函数和方法应该始终在其名称中明确说明它们的作用。通常,预期的输入参数和返回值也可以包含在名称中。

试着猜测以下函数是做什么的,以及它们的返回值是什么。

getUserById($id);
saveErrorToLog($message);
createDefaultDirectory($path);
setAuthors(['Jan Barášek', '查克-诺里斯']);
getCurrentTime();

整个诀窍在于名称中的第一个词,它使人们清楚地知道函数将使用什么方法。通常遵循以下惯例。

  • get - 以数组或对象形式检索数据,输入参数指定被搜索的实体。
  • save - 保存到文件或数据库中
  • create--创建一个实体(例如,创建一个对象的实例)。
  • set--将数据保存到一个预定义的变量中(在一个函数内)。

类别名称

一个类是一个大的实体,包含大量的属性和方法,所以它也应该以大写字母开头。一个类也应该只承载一个实体(并描述其属性),所以它应该用一个单数的名字来命名。如果我们需要处理多个实体,我们可以直接将每个实例存储在一个数组中。

例子。

class User
{
public string $username;
public string $password;
public string $role;
}
class Users
{
/** @var User[] */
public array $users;
public function addUser(User $user): void
{
$this->users = array_push($this->users, $user);
}
}

用户类只专门处理关于一个特定用户的信息。如果我们想与多个用户一起工作,我们创建另一个类(envelope),携带一个特定实体的实例阵列。

工厂往往也可以在这方面发挥作用,因为它们允许我们轻松地创建类似的对象并回收原始实例,从而使代码更加清晰,同时节省系统资源。

名称空间 - 名称空间

虽然Namespace独立于脚本所在的物理目录,但至少部分地尊重项目的布局是一个好的做法(这导致了一个更好的创建新名称的系统,这种方式更加明确)。

我个人根据该类型的类的公共子目录来命名命名空间。

例子。

App\Presenters; // 这些是所有演讲者的名字
App\Model; // 这是一般模型的名称
App\Model\Math; // 这是与数学一起工作的模型的名称

为了正确地自动加载类,遵循PSR-4标准是一个好主意。

自定义惯例(例如,在公司团队中)。

那你给你的东西起什么名字呢?我希望得到关于如何改进这篇文章的建议。

不过,一般来说,在一个团队中自定义约定并没有什么意义,因为这使得代码更难移植到其他框架中,而且当你雇用一个新同事时,你必须学习当前的约定。因此,最好遵循 "PSR-4 "标准。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
2.
Status:
All systems normal.
2024