Quy tắc cho các biến php

Tôi chỉ có thể suy đoán rằng điều này bắt nguồn từ các phiên bản rất sớm, có thể là PHP/FI 2. 0. Hướng dẫn nêu rõ ràng

Hãy nhớ rằng tên hàm PHP/FI không phân biệt chữ hoa chữ thường

Hầu hết đầu vào của người dùng, chẳng hạn như tham số GET và POST, luôn được đăng ký dưới dạng biến toàn cục, trước đó. Việc coi những điều này là không phân biệt chữ hoa chữ thường có thể sẽ gây ra sự cố và do đó, được cho là tất cả các biến đã được coi là phân biệt chữ hoa chữ thường

Từ những gì tôi có thể nói đây là những loại định danh duy nhất trong PHP/FI 2. 0. Tất cả những cái khác đã được giới thiệu sau, dường như bắt chước các tên hàm không phân biệt chữ hoa chữ thường

Các hằng số, đặc biệt, chỉ được giới thiệu kể từ PHP 4 [hướng dẫn sử dụng PHP 3 đề cập đến "hằng số", nhưng ngày nay chúng được gọi là "chữ"]. Vì một số lý do bí ẩn [có thể không tìm thấy sự đồng thuận nào], người ta đã quyết định cho phép các mã định danh không đổi là

class Foo {
    public function bar[]
    {
        $baz = "Bad"; // Unused
    }
}
4d phân biệt chữ hoa chữ thường hoặc không phân biệt chữ hoa chữ thường đối với sự phân biệt của nhà phát triển. Điều thú vị là, trong khi
class Foo {
    public function bar[]
    {
        $baz = "Bad"; // Unused
    }
}
4 mặc định là hằng số phân biệt chữ hoa chữ thường, thì đối tác C tương ứng [
class Foo {
    public function bar[]
    {
        $baz = "Bad"; // Unused
    }
}
6] mặc định là không phân biệt chữ hoa chữ thường

Các biến trong PHP được biểu thị bằng ký hiệu đô la theo sau là tên của biến. Tên biến phân biệt chữ hoa chữ thường

Tên biến tuân theo các quy tắc giống như các nhãn khác trong PHP. Tên biến hợp lệ bắt đầu bằng một chữ cái hoặc dấu gạch dưới, theo sau là bất kỳ số lượng chữ cái, số hoặc dấu gạch dưới nào. Là một biểu thức chính quy, nó sẽ được thể hiện như vậy.

class Foo {
    public function bar[]
    {
        $baz = "Bad"; // Unused
    }
}
7

Ghi chú. Đối với mục đích của chúng ta ở đây, một chữ cái là a-z, A-Z và các byte từ 128 đến 255 [

class Foo {
    public function bar[]
    {
        $baz = "Bad"; // Unused
    }
}
8].

Ghi chú. ______79 là biến đặc biệt không thể gán. Trước PHP 7. 1. 0, gán gián tiếp [e. g. bằng cách sử dụng biến biến] là có thể.

Để biết thông tin về các hàm liên quan đến biến, hãy xem Tham khảo hàm biến

class Foo {
    const MY_CONST = "GOOD"; // ok
    const myconst = "BAD"; // fail
}
0

Theo mặc định, các biến luôn được gán theo giá trị. Điều đó có nghĩa là, khi bạn gán một biểu thức cho một biến, toàn bộ giá trị của biểu thức ban đầu được sao chép vào biến đích. Ví dụ, điều này có nghĩa là sau khi gán giá trị của một biến cho một biến khác, việc thay đổi một trong các biến đó sẽ không ảnh hưởng đến biến kia. Để biết thêm thông tin về loại bài tập này, hãy xem chương về Biểu thức

PHP cũng cung cấp một cách khác để gán giá trị cho các biến. chỉ định bằng cách tham khảo. Điều này có nghĩa là biến mới chỉ đơn giản là tham chiếu [nói cách khác, "trở thành bí danh cho" hoặc "trỏ tới"] biến ban đầu. Các thay đổi đối với biến mới ảnh hưởng đến biến ban đầu và ngược lại

Để gán theo tham chiếu, chỉ cần thêm dấu và [&] vào đầu biến đang được gán [biến nguồn]. Chẳng hạn, đoạn mã sau xuất ra '

class Foo {
    const MY_CONST = "GOOD"; // ok
    const myconst = "BAD"; // fail
}
1' hai lần

Trong bài viết này, mình sẽ đề cập đến một khía cạnh nhỏ thôi, trong một chủ đề cũng không có gì là mới mẻ cho lắm, nhưng vẫn luôn mang rất nhiều ý nghĩa và giá trị. Mã sạch

Viết code "sạch đẹp" bao giờ cũng là mong muốn và nguyện vọng của bất kỳ lập trình viên nào. Tuy nhiên để thực hiện điều đó lại không phải là câu chuyện dễ dàng. Có rất nhiều vấn đề liên quan đến việc "làm thế nào để viết code sạch đẹp", cũng như có rất nhiều kiến ​​thức mà bạn cần phải tìm hiểu, từ nguyên tắc thiết kế, mẫu thiết kế

Nói là khó khăn như vậy thôi nhưng bạn cũng có thể bắt đầu từ những bước nhỏ và dễ dàng trước. Bên cạnh những vấn đề liên quan đến mã logic, cách thức triển khai chức năng, thì cũng có những quy tắc đơn giản mà bạn có thể áp dụng để cải thiện mã thiện chất lượng của mình. Và trong bài viết này, mình sẽ giới thiệu đến các bạn một số quy tắc như vậy

Các quy tắc được đề cập trong bài viết này được trích ra từ bộ quy tắc của một công cụ phân tích mã tĩnh có tên

class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
4 [PHP Mess Detector]. Mặc dù nó là công cụ dành cho ngôn ngữ PHP, thế nhưng những nội dung, tư tưởng của các bộ quy tắc này thì đều rất hay, và có thể áp dụng ở các ngôn ngữ lập trình khác nữa. Thế nên các bạn cứ tham khảo xem sao nhé

Một chút giới thiệu về
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
4

PHPMD hay PHP Mess Detector là một dự án được xây dựng trên nền tảng nền tảng của một công cụ khác là PHP Phụ thuộc với mong muốn xây dựng một công cụ cộng đồng PHP tương tự với công cụ PMD nổi tiếng bên Java

PHPMD sẽ phân tích mã nguồn, để tìm ra những vấn đề có thể gây ảnh hưởng không tốt đến việc phát triển, duy trì dự án sau này. Hay nói cách khác, PHPMD không phải lúc nào cũng có thể giúp bạn tìm ra lỗi, mà nó là tập trung giúp bạn tìm ra những đoạn mã "có mùi" và đưa ra lời khuyên cho bạn về cách chỉnh sửa mã nguồn của chúng. . Những vấn đề mà PHPMD có thể giúp bạn

  • lỗi có thể. Một số đoạn có thể xảy ra lỗi. Do PHPMD chỉ phân tích mã tĩnh nên bạn cũng đừng kỳ vọng vào công việc nó là công cụ vạn năng có thể tìm ra lỗi. logic trong mã của bạn
  • mã dưới mức tối ưu. Những đoạn mã chưa thực sự tối ưu
  • Biểu thức quá phức tạp. Các biểu thức, cách viết quá phức tạp
  • Các tham số, phương thức, thuộc tính không được sử dụng. Các biến, hàm, thuộc tính được xác định nhưng không được sử dụng

Nếu đọc hết bài này và bạn có hứng thú, muốn thử cài đặt cũng như sử dụng PHPMD trong dự án PHP của mình, thì bạn có thể tham khảo hướng dẫn tại đây. Hay nếu bạn muốn sử dụng PMD cho project Java hay Javascript của mình thì có thể tham khảo cách cài đặt tại đây

Tiếp theo, chúng ta hãy cùng đi vào chi tiết nội dung các Rules nhé

quy tắc đặt tên

Quy tắc đặt tên là các quy tắc liên quan đến việc đặt tên biến, hàm sao cho hợp lý. Bạn có thể tưởng tượng các đồ vật đơn giản như nó là các bộ quy tắc bổ sung bổ sung cho các quy ước đã được đề cập trong PSR-1 và PSR-2

Biến tên quá ngắn

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    6
  • Nội dung. Không khai báo một biến, một tham số có tên quá ngắn, ví dụ như < 3 ký tự xác định giới hạn. Bởi vì tên quá ngắn, bạn sẽ không thể diễn tả được ý nghĩa của cái tên đó

Biến tên quá dài

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    7
  • Nội dung. Ngược lại với quy tắc ở trên, bạn không nên khai báo một biến, hoặc một tham số có tên quá dài

The function name is too short

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    8
  • Nội dung. Một quy tắc khác liên quan đến độ dài, lần này thay vì biến thì ta có quy tắc cho tên phương thức. Tương tự như biến thì tên phương thức của bạn cũng không nên để quá ngắn

Cách đặt tên cho hằng số

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    9
  • Nội dung. Quy tắc này đưa ra nội dung về việc các hằng số được khai báo thông qua từ khóa
    class Foo {
        public function bar[]
        {
            $baz = "Bad"; // Unused
        }
    }
    
    0 cần phải được viết dưới dạng
    class Foo {
        public function bar[]
        {
            $baz = "Bad"; // Unused
        }
    }
    
    1
  • Ví dụ
________số 8

Cách đặt trên hàm mà trả về giá trị
class Foo {
    public function bar[]
    {
        $baz = "Bad"; // Unused
    }
}
2

  • Tên quy tắc trong PHPMD.
    class Foo {
        public function bar[]
        {
            $baz = "Bad"; // Unused
        }
    }
    
    3
  • Nội dung. Nếu một hàm của bạn trả về giá trị là
    class Foo {
        public function bar[]
        {
            $baz = "Bad"; // Unused
        }
    }
    
    2, thì hàm đó không nên được đặt tên theo dạng
    class Foo {
        public function bar[]
        {
            $baz = "Bad"; // Unused
        }
    }
    
    5, mà cần phải được đặt theo dạng
    class Foo {
        public function bar[]
        {
            $baz = "Bad"; // Unused
        }
    }
    
    6 hoặc
    class Foo {
        public function bar[]
        {
            $baz = "Bad"; // Unused
        }
    }
    
    7
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
5

Quy tắc mã không được sử dụng

Unused Code Rules là các quy tắc liên quan đến việc tìm ra các đoạn mã thừa, không được sử dụng trong dự án

Thuộc tính riêng không được sử dụng

  • Tên quy tắc trong PHPMD.
    class Foo {
        public function bar[]
        {
            $baz = "Bad"; // Unused
        }
    }
    
    8
  • Nội dung. Bạn không nên khai báo hay gán giá trị cho một thuộc tính riêng tư, nhưng rồi lại không sử dụng nó ở bất kỳ đâu
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}

Biến cục bộ không được sử dụng

  • Tên quy tắc trong PHPMD.
    class Foo {
        public function bar[]
        {
            $baz = "Bad"; // Unused
        }
    }
    
    9
  • Nội dung. Bạn không nên khai báo hay gán giá trị cho một biến cục bộ [được khai báo bên trong một hàm giả định], nhưng không sử dụng nó ở bất kỳ nơi nào khác
  • Ví dụ
class Foo {
    public function bar[]
    {
        $baz = "Bad"; // Unused
    }
}

Phương pháp riêng tư không được sử dụng

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    00
  • Nội dung. Bạn không nên khai báo một phương thức riêng tư mà không sử dụng nó ở nơi nào khác

Tham số không được sử dụng

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    01
  • Nội dung. Bạn không nên truyền các tham số vào trong các phương thức hay các bộ điều khiển mà không sử dụng chúng ở đâu cả
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
0

quy tắc gây tranh cãi

Đây là tập hợp các bộ quy tắc thường hay là chủ đề bàn luận của nhiều phái phái khác nhau

Nhưng những năm gần đây, với sự ra đời của PSR-1 chuẩn

Sử dụng biến Super global

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    02
  • Nội dung. Superglobals là các biến tích hợp sẵn của PHP và có thể được sử dụng ở bất kỳ đâu. Các biến Superglobals bao gồm
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    03,
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    04,
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    05,
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    06,
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    07,
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    08,
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    09,
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    10, và
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    11. Bạn không nên truy cập trực tiếp vào các biến Superglobals này, và nếu cần lấy các giá trị trong đó, hãy sử dụng các hàm hay đối tượng được cung cấp bởi framework

Quy ước tên lớp

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    12
  • Nội dung. Khi đặt tên lớp, hãy sử dụng
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    13. Quy tắc này cũng được cập nhật trong PSR-1
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
1

Quy ước tên tài sản

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    14
  • Nội dung. Khi đặt tên thuộc tính trong lớp, hãy sử dụng
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    15
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
8

Quy ước tên phương thức

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    16
  • Nội dung. Khi đặt tên cho một hàm, hãy sử dụng
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    15
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
1

Tên thông số Quy ước

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    18
  • Nội dung. Khi đặt tên tham số truyền vào trong phương thức, hãy sử dụng
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    15

Quy ước tên biến

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    80
  • Nội dung. Khi đặt tên một biến, hãy sử dụng
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    15

Nguyên lý thiết kế

Quy tắc thiết kế là các quy tắc liên quan đến thiết kế phần mềm

Về việc sử dụng
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
82

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    83
  • Nội dung. Sử dụng hàm
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    84 trong đoạn mã bình thường của dự án được coi là một thông lệ tồi và nên tránh. biểu thức thoát chỉ nên được sử dụng trong các đoạn mã khởi động mà ở đó cần phải trả lại mã thoát cho môi trường
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
9

Về việc sử dụng
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
85

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    86
  • Nội dung. Việc sử dụng hàm
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    87 làm cho mã của bạn không thể viết bài kiểm tra được, hơn nữa còn ẩn những vấn đề về bảo mật, thế nên nó được coi là một thông lệ xấu và cần phải tránh. Hãy tìm cách thay thế biểu thức eval bằng các đoạn mã bình thường
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
3

Về việc sử dụng
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
88

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    89
  • Nội dung. Việc sử dụng
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    88 sẽ khiến code của bạn trở nên khó đọc hơn, và cực kỳ khó để nắm bắt được một luồng xử lý. Do đó công việc này cần phải tránh. Thay vì sử dụng
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    88 , hãy sử dụng các câu lệnh rẽ nhánh thông thường, hay các phương thức chia tách ra, lúc đó mã sẽ dễ đọc và dễ kiểm tra hơn

Number of Class con

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    12
  • Nội dung. Một lớp mà con số lượng lớp con quá lớn là một dấu hiệu cho thấy hệ thống có sự thiết kế kế thừa không cần thiết bằng. Bạn nên cân nhắc việc tái cấu trúc lại phần kế thừa của các lớp này

Độ sâu của kế thừa

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    13
  • Nội dung. Một lớp có quá nhiều phụ huynh, tức là nó được kế thừa qua quá nhiều tầng lớp, là dấu hiệu cho thấy sự mất cân bằng hoặc sai sót trong thiết kế kế thừa. Bạn nên cân nhắc việc refactor lại hệ thống kế thừa này. Ví dụ như một lớp kế thừa đến 7 tầng cha mẹ, thì có thể bạn nên bắt đầu xem xét lại

Độ phụ thuộc giữa các đối tượng

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    14
  • Nội dung. Một lớp có quá nhiều phụ thuộc, tức phụ thuộc vào quá nhiều lớp khác, sẽ gây ra rất nhiều ảnh hưởng xấu nên chính nó. Việc có quá nhiều phụ thuộc sẽ gây ra những ảnh hưởng như khó hiểu về cấu trúc, thiếu sự ổn định, khó duy trì sau này. Bạn có thể xem thêm về khái niệm Low Coupling ở bài viết này. Ví dụ như nếu lớp của bạn có khoảng hơn 13 phụ thuộc [tức thì có các phương thức, hay thuộc tính nhận vào hơn 13 đối tượng là tức thì của các lớp khác] thì bạn có thể nên bắt đầu xem xét lại

Về việc sử dụng các đoạn mã dành cho việc gỡ lỗi

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    15
  • Nội dung. Những chức năng như
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    16,
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    17 thường chỉ được sử dụng trong quá trình phát triển để gỡ lỗi, và nếu nó xuất hiện trên sản xuất thì gần như chỉ có lý do duy nhất là. bạn đã quên không xóa đi những đoạn code debug của mình mà thôi

Khối
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
18 trống

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    19
  • Nội dung. Việc sử dụng
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    90 -
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    18 thường thấy trong các dự án, nhưng việc sử dụng một hàm
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    18 với nội dung trống rỗng là một công việc mà bạn nên tránh trong hầu hết các trường hợp. Việc làm đó sẽ chỉ giúp bạn loại bỏ lỗi/ngoại lệ của hệ thống, coi như nó không xuất hiện, chứ không phải là cách tốt để giúp bạn theo dõi các sự cố xảy ra, cũng như tìm cách khắc phục. Hãy cố gắng xử lý các ngoại lệ mà mình bắt được, chí ít cũng là đăng nhập lại nội dung của nó để công việc gỡ lỗi sau này được dễ dàng hơn
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
50

Sử dụng hàm đếm kích thước trong biểu thức vòng lặp

  • Tên quy tắc trong PHPMD.
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    93
  • Nội dung. Việc sử dụng các hàm như
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    94 hoặc
    class Foo
    {
        private static $BAR = 0; // Unused
        private $baz = 1; // Unused
        private $qux = 2;
        public function addOne[]
        {
            return $this->qux++;
        }
    }
    
    95 để tính toán các phần tử của mảng bên trong biểu thức vòng lặp [phần định nghĩa vòng lặp] được coi là một thực tiễn tồi và có thể là nguyên nhân gây ra rất nhiều lỗi, đặc biệt là khi trong
  • Ví dụ
class Foo
{
    private static $BAR = 0; // Unused
    private $baz = 1; // Unused
    private $qux = 2;
    public function addOne[]
    {
        return $this->qux++;
    }
}
51

Tổng kết

Như vậy là ở phần 1 này, chúng ta đã chỉ ra một số quy tắc cơ bản mà phần lớn chúng ta có thể nhận ra một cách dễ dàng khi xem lại mã tĩnh

Các quy tắc được đề cập ở trên đều khá đơn giản và hy vọng các bạn có thể nắm bắt được nó, mặc dù phần giải thích nhiều chỗ cũng rất ngắn gọn

Sự hiểu biết về nội dung, cũng như cách thức xử lý những vấn đề đó sẽ giúp bạn xây dựng một dự án với mã nguồn rõ ràng hơn, sạch hơn, dễ bảo trì cũng như mở rộng hơn

Sang phần 2, chúng ta sẽ đi tiếp về một số quy tắc phức tạp hơn, với nhiều khái niệm mới lạ hơn, chắc chắn là sẽ giúp ích nhiều hơn cho bạn đấy.

Chủ Đề