PHP 代码简洁之道 ( PHP Clean Code)(第一部分)
变量? 使用有意义的且可读的变量名不友好的: $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]);
一般: 这个好点,但我们仍严重依赖正则表达式。 $address = 'One Infinite Loop,$matches); [,$city,$zipCode] = $matches; saveCityZipCode($city,$zipCode);
很棒: 通过命名子模式减少对正则表达式的依赖。 $address = 'One Infinite Loop,s*(?<city>.+?)s*(?<zipCode>d{5})$/'; preg_match($cityZipCodeRegex,$matches); saveCityZipCode($matches['city'],$matches['zipCode']);
避免嵌套太深和提前返回 (第一部分)使用太多? 不好: function isShopOpen($day): bool { if ($day) { if (is_string($day)) { $day = strtolower($day); if ($day === 'friday') { return true; } elseif ($day === 'saturday') { return true; } elseif ($day === 'sunday') { return true; } else { return false; } } else { return false; } } else { return false; } }
很棒: function isShopOpen(string $day): bool { if (empty($day)) { return false; } $openingDays = [ 'friday','saturday','sunday' ]; return in_array(strtolower($day),$openingDays,true); }
避免嵌套太深和提前返回 (第二部分)不好: 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); }
避免心理映射不要迫使你的代码阅读者翻译变量的意义。 不好: $l = ['Austin','New York','San Francisco']; for ($i = 0; $i < count($l); $i++) { $li = $l[$i]; doStuff(); doSomeOtherStuff(); // ... // ... // ... // Wait,what is `$li` for again? dispatch($li); }
很棒: $locations = ['Austin','San Francisco']; foreach ($locations as $location) { doStuff(); doSomeOtherStuff(); // ... // ... // ... dispatch($location); }
不要增加不需要的上下文如果类名或对象名告诉你某些东西后,请不要在变量名中重复。 小坏坏: class Car { public $carMake; public $carModel; public $carColor; //... }
好的方式: class Car { public $make; public $model; public $color; //... }
更多学习内容请访问: 腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新) ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |