介绍
Robert C.Martin's 的 软件工程师准则 Clean Code 同样适用于 PHP。它并不是一个编码风格指南,它指导我们用 PHP 写出具有可读性,可复用性且可分解的代码。
并非所有的准则都必须严格遵守,甚至一些已经成为普遍的约定。这仅仅作为指导方针,其中许多都是 Clean Code 作者们多年来的经验。
灵感来自于 clean-code-javascript
尽管许多开发者依旧使用 PHP 5 版本,但是这篇文章中绝大多数例子都是只能在 PHP 7.1 + 版本下运行。
变量
使用有意义的且可读的变量名
不友好的:
$ymdstr = $moment->format('y-m-d');
友好的:
$currentDate = $moment->format('y-m-d');
对同类型的变量使用相同的词汇
不友好的:
getUserInfo(); getUserData(); getUserRecord(); getUserProfile();
友好的:
getUser();
使用可搜索的名称(第一部分)
我们阅读的代码超过我们写的代码。所以我们写出的代码需要具备可读性、可搜索性,这一点非常重要。要我们去理解程序中没有名字的变量是非常头疼的。让你的变量可搜索吧!
不具备可读性的代码:
// 见鬼的 448 是什么意思? $result = $serializer->serialize($data, 448);
具备可读性的:
$json = $serializer->serialize($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
使用可搜索的名称(第二部分)
不好的:
// 见鬼的 4 又是什么意思? if ($user->access & 4) { // ... }
好的方式:
class User { const ACCESS_READ = 1; const ACCESS_CREATE = 2; const ACCESS_UPDATE = 4; const ACCESS_DELETE = 8; } if ($user->access & User::ACCESS_UPDATE) { // do edit ... }
使用解释性变量
不好:
$address = 'One Infinite Loop, Cupertino 95014'; $cityZipCodeRegex = '/^[^,]+,\s*(.+?)\s*(\d{5})$/'; preg_match($cityZipCodeRegex, $address, $matches); saveCityZipCode($matches[1], $matches[2]);
一般:
这个好点,但我们仍严重依赖正则表达式。