查看: 330|回复: 0

[PHP学习] PHP代码简洁之道——变量部分

发表于 2017-10-11 08:00:05
尚学堂AD

将代码写的简洁并且易读易懂是每一位优秀的coder所应该具备的基本功。

前几天在github上看到clean-code-php这个项目,感觉很有收获,于是在这里记录一下。

使用有意义并且可读的变量名称

Bad:

  1. $ymdstr = $moment->format('y-m-d');
复制代码

Good:

  1. $currentDate = $moment->format('y-m-d');
复制代码
对同一只类型的变量使用同样的词汇

Bad:

  1. getUserInfo();
  2. getUserData();
  3. getUserRecord();
  4. getUserProfile();
复制代码

Good:

  1. getUser();
复制代码
使用易于查找的命名

Bad:

  1. // 这里的4是什么鬼??
  2. if ($user->access & 4) {
  3. // ...
  4. }
复制代码

Good:

  1. class User
  2. {
  3. const ACCESS_READ = 1;
  4. const ACCESS_CREATE = 2;
  5. const ACCESS_UPDATE = 4;
  6. const ACCESS_DELETE = 8;
  7. }
  8. if ($user->access & User::ACCESS_UPDATE) {
  9. // do edit ...
  10. }
复制代码
不要让读者猜

Bad:

  1. $l = ['Austin', 'New York', 'San Francisco'];
  2. for ($i = 0; $i < count($l); $i++) {
  3. $li = $l[$i];
  4. doStuff();
  5. doSomeOtherStuff();
  6. // ...
  7. // ...
  8. // ...
  9. // $li 变量代表什么???
  10. dispatch($li);
  11. }
复制代码

Good:

  1. $locations = ['Austin', 'New York', 'San Francisco'];
  2. foreach ($locations as $location) {
  3. doStuff();
  4. doSomeOtherStuff();
  5. // ...
  6. // ...
  7. // ...
  8. dispatch($location);
  9. }
复制代码
避免过深的嵌套

Bad:

  1. function isShopOpen($day)
  2. {
  3. if ($day) {
  4. if (is_string($day)) {
  5. $day = strtolower($day);
  6. if ($day === 'friday') {
  7. return true;
  8. } elseif ($day === 'saturday') {
  9. return true;
  10. } elseif ($day === 'sunday') {
  11. return true;
  12. } else {
  13. return false;
  14. }
  15. } else {
  16. return false;
  17. }
  18. } else {
  19. return false;
  20. }
  21. }
复制代码

Good:

  1. function isShopOpen($day)
  2. {
  3. if (empty($day) && ! is_string($day)) {
  4. return false;
  5. }
  6. $openingDays = [
  7. 'friday', 'saturday', 'sunday'
  8. ];
  9. return in_array(strtolower($day), $openingDays);
  10. }
复制代码

Bad:

  1. function fibonacci($n)
  2. {
  3. if ($n < 50) {
  4. if ($n !== 0) {
  5. if ($n !== 1) {
  6. return fibonacci($n - 1) + fibonacci($n - 2);
  7. } else {
  8. return 1;
  9. }
  10. } else {
  11. return 0;
  12. }
  13. } else {
  14. return 'Not supported';
  15. }
  16. }
复制代码

Good:

  1. function fibonacci($n)
  2. {
  3. if ($n === 0) {
  4. return 0;
  5. }
  6. if ($n === 1) {
  7. return 1;
  8. }
  9. if ($n > 50) {
  10. return 'Not supported';
  11. }
  12. return fibonacci($n - 1) + fibonacci($n - 2);
  13. }
复制代码
不要添加不必要的上下文

如果你的类/对象已经说明了一些信息,不要在你的变量名和属性里重复

Bad:

  1. class Car
  2. {
  3. public $carMake;
  4. public $carModel;
  5. public $carColor;
  6. //...
  7. }
复制代码

Good:

  1. class Car
  2. {
  3. public $make;
  4. public $model;
  5. public $color;
  6. //...
  7. }
复制代码
参数初始化时设置默认值
  1. function create($name = null)
  2. {
  3. $newName = $name ?: 'ABC';
  4. // ...
  5. }
复制代码

设置默认值一个比较明显的好处是,当对一个较早之前已经定义好的函数添加参数时,将新增的参数设置默认值可以省得去修改以前使用该函数的地方。



回复

使用道具 举报