工具标签
PHP变量
变量
1. 使用见字知意的变量名
坏:
$ymdstr = $moment->format('y-m-d');
好:
$currentDate = $moment->format('y-m-d');
2. 同一个实体要用相同的变量名
坏:
getUserInfo(); getUserData(); getUserRecord(); getUserProfile();
好:
getUser();
3. 使用便于搜索的名称 (part 1)
写代码是用来读的。所以写出可读性高、便于搜索的代码至关重要。 命名变量时如果没有有意义、不好理解,那就是在伤害读者。 请让你的代码便于搜索。
坏:
// 448 ™ 干啥的? $result = $serializer->serialize($data, 448);
好:
$json = $serializer->serialize($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
4. 使用便于搜索的名称 (part 2)
坏:
class User
{
// 7 ™ 干啥的?
public $access = 7;
}
// 4 ™ 干啥的?
if ($user->access & 4) {
// ...
}
// 这里会发生什么?
$user->access ^= 2;
好:
class User
{
const ACCESS_READ = 1;
const ACCESS_CREATE = 2;
const ACCESS_UPDATE = 4;
const ACCESS_DELETE = 8;
// 默认情况下用户 具有读、写和更新权限
public $access = self::ACCESS_READ | self::ACCESS_CREATE | self::ACCESS_UPDATE;
}
if ($user->access & User::ACCESS_UPDATE) {
// do edit ...
}
// 禁用创建权限
$user->access ^= User::ACCESS_CREATE;
5. 使用自解释型变量
坏:
$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,]+,\s*(.+?)\s*(\d{5})$/';
preg_match($cityZipCodeRegex, $address, $matches);
saveCityZipCode($matches[1], $matches[2]);
不错:
好一些,但强依赖于正则表达式的熟悉程度
$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,]+,\s*(.+?)\s*(\d{5})$/';
preg_match($cityZipCodeRegex, $address, $matches);
[, $city, $zipCode] = $matches;
saveCityZipCode($city, $zipCode);
好:
使用带名字的子规则,不用懂正则也能看的懂
$address = 'One Infinite Loop, Cupertino 95014';
$cityZipCodeRegex = '/^[^,]+,\s*(?<city>.+?)\s*(?<zipCode>\d{5})$/';
preg_match($cityZipCodeRegex, $address, $matches);
saveCityZipCode($matches['city'], $matches['zipCode']);
6. 避免深层嵌套,尽早返回 (part 1)
太多的if else语句通常会导致你的代码难以阅读,直白优于隐晦
糟糕:
if (empty($day)) {
return false;
}
$openingDays = [
'friday', 'saturday', 'sunday'
];
return in_array(strtolower($day), $openingDays, true);
}
7. 避免深层嵌套,尽早返回 (part 2)
糟糕的:
function fibonacci(int $n)
{
if ($n < 50) {
if ($n !== 0) {
if ($n !== 1) {
return fibonacci($n - 1) + fibonacci($n - 2);
} else {
return 1;
}
} else {
return 0;
}
} else {
return 'Not supported';
}
}
好:
function fibonacci(int $n): int
{
if ($n === 0 || $n === 1) {
return $n;
}
if ($n >= 50) {
throw new \Exception('Not supported');
}
return fibonacci($n - 1) + fibonacci($n - 2);
}
8. 少用无意义的变量名
别让读你的代码的人猜你写的变量是什么意思。 写清楚好过模糊不清。
坏:
$l = ['Austin', 'New York', 'San Francisco'];
for ($i = 0; $i < count($l); $i++) {
$li = $l[$i];
doStuff();
doSomeOtherStuff();
// ...
// ...
// ...
// 等等, `$li` 又代表什么?
dispatch($li);
}
好:
$locations = ['Austin', 'New York', 'San Francisco'];
foreach ($locations as $location) {
doStuff();
doSomeOtherStuff();
// ...
// ...
// ...
dispatch($location);
}
9. 不要添加不必要上下文
如果从你的类名、对象名已经可以得知一些信息,就别再在变量名里重复。
坏:
class Car
{
public $carMake;
public $carModel;
public $carColor;
//...
}
好:
class Car
{
public $make;
public $model;
public $color;
//...
}
10. 合理使用参数默认值,没必要在方法里再做默认值检测
不好:
不好,$breweryName 可能为 NULL.
function createMicrobrewery($breweryName = 'Hipster Brew Co.'): void
{
// ...
}
还行:
比上一个好理解一些,但最好能控制变量的值
function createMicrobrewery($name = null): void
{
$breweryName = $name ?: 'Hipster Brew Co.';
// ...
}
好:
如果你的程序只支持 PHP 7+, 那你可以用 type hinting 保证变量 $breweryName 不是 NULL.
function createMicrobrewery(string $breweryName = 'Hipster Brew Co.'): void
{
// ...
}
相关视频
热AI工具
Undress AI Tool
免费脱衣服图片
AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。
Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片
Stock Market GPT
人工智能驱动投资研究,做出更明智的决策
热门文章
Windows10无法连接Internet_Win10网络重置命令详解
3 周前 By DDD
如何修复电脑在游戏中卡顿或微冻结的问题?
1 个月前 By 下次还敢
Win11怎么设置不显示常用文件夹_Windows11快速访问设置
3 周前 By DDD
网易云音乐怎么更改歌曲缓存目录
3 周前 By DDD
热门话题
# 抖音等级价目表1-75
20476
7
20476
7
# wifi显示无ip分配
13607
4
13607
4
# 虚拟手机号接收验证码
11948
4
11948
4
# gmail邮箱登陆入口在哪里
8956
17
8956
17
# windows安全中心怎么关闭
8495
7
8495
7
热门工具
记事本++7.3.1
好用且免费的代码编辑器
SublimeText3汉化版
中文版,非常好用
禅工作室 13.0.1
功能强大的PHP集成开发环境
Dreamweaver CS6
视觉化网页开发工具
SublimeText3 Mac版
神级代码编辑软件(SublimeText3)












![PHP实战开发极速入门: PHP快速创建[小型商业论坛]](https://img.php.cn/upload/course/000/000/035/5d27fb58823dc974.jpg)
