A-A+

PHP代码编写规范

2022年06月11日 我爱编程 暂无评论

不添加不需要的上下文

如果你的类名或对象名称有具体的含义,请不要重复该变量的名称。

差:

  1. <?php class Car{
  2.     public $carMake;
  3.     public $carModel;
  4.     public $carColor;
  5.     //...
  6.     }

好:

  1. <?php class Car{
  2.     public $make;
  3.     public $model;
  4.     public $color;
  5.     //...
  6.     }

函数参数数量(理想情况是 2 个以下)

限制函数参数的数量是非常重要的,因为它让函数更容易测试,参数超过三个的话,你必须用每个单独的参数测试大量不同的情况。

无参数是理想的情况。一个或两个参数是可以的,但应该避免三个。通常,如果你有两个以上的参数,那么你的函数试图完成太多的功能,若不是,大多数时候,较高级的对象就足以作为参数(译者注:比如数组、对象)。

差:

  1. <?php function createMenu($title$body$buttonText$cancellable) {
  2.     // ...}

好:

  1. <?php class MenuConfig {
  2.     public $title;
  3.     public $body;
  4.     public $buttonText;
  5.     public $cancellable = false;}$config = new MenuConfig();$config->title = 'Foo';$config->body = 'Bar';$config->buttonText = 'Baz';$config->cancellable = true;function createMenu(MenuConfig $config) {
  6.     // ...}

一个函数应该只完成一件事

这是软件工程中最重要的规则。当函数做的事多于一件事情时,他们更难编写和测试。 当你可以将函数隔离成一个动作时,可以轻松重构,代码也将更易读。

差:

  1. <?phpfunction emailClients($clients) {
  2.     foreach ($clients as $client) {
  3.         $clientRecord = $db->find($client);
  4.         if ($clientRecord->isActive()) {
  5.             email($client);
  6.         }
  7.     }}

好:

  1. function emailClients($clients) {
  2.     $activeClients = activeClients($clients);
  3.     array_walk($activeClients'email');
  4. }
  5. function activeClients($clients) {
  6.     return array_filter($clients'isClientActive');
  7. }
  8. function isClientActive($client) {
  9.     $clientRecord = $db->find($client);
  10.     return $clientRecord->isActive();
  11. }

使用 get 和 set 方法

在 PHP 中,可以为方法设置 public、protected 和 private 关键字,可以控制对象上的属性可见性。这是面向对象的设计原则中的开放/封闭原则的一部分。

差:

  1. class BankAccount
  2. {
  3.     public $balance = 1000;
  4. }
  5. $bankAccount = new BankAccount();
  6. // Buy shoes...
  7. $bankAccount->balance -= 100;

好:

  1. class BankAccount
  2. {
  3.     private $balance;
  4.     public function __construct($balance = 1000)
  5.     {
  6.       $this->balance = $balance;
  7.     }
  8.     public function withdrawBalance($amount)
  9.     {
  10.         if ($amount > $this->balance) {
  11.             throw new \Exception('Amount greater than available balance.');
  12.         }
  13.         $this->balance -= $amount;
  14.     }
  15.     public function depositBalance($amount)
  16.     {
  17.         $this->balance += $amount;
  18.     }
  19.     public function getBalance()
  20.     {
  21.         return $this->balance;
  22.     }
  23. }
  24. $bankAccount = new BankAccount();
  25. // Buy shoes...
  26. $bankAccount->withdrawBalance($shoesPrice);
  27. // Get balance
  28. $balance = $bankAccount->getBalance();

给我留言

Copyright © 四季博客 保留所有权利.   Theme  Ality

用户登录