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ườngCá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
}
}
7Ghi 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 [
8].class Foo { public function bar[] { $baz = "Bad"; // Unused } }
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
}
0Theo 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ầnTrong 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
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
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.
6class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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.
7class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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.
8class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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.
9class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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
0 cần phải được viết dưới dạngclass Foo { public function bar[] { $baz = "Bad"; // Unused } }
1class Foo { public function bar[] { $baz = "Bad"; // Unused } }
- Ví dụ
Cách đặt trên hàm mà trả về giá trị class Foo {
public function bar[]
{
$baz = "Bad"; // Unused
}
}
2
class Foo {
public function bar[]
{
$baz = "Bad"; // Unused
}
}
- Tên quy tắc trong PHPMD.
3class Foo { public function bar[] { $baz = "Bad"; // Unused } }
- Nội dung. Nếu một hàm của bạn trả về giá trị là
2, thì hàm đó không nên được đặt tên theo dạngclass Foo { public function bar[] { $baz = "Bad"; // Unused } }
5, mà cần phải được đặt theo dạngclass Foo { public function bar[] { $baz = "Bad"; // Unused } }
6 hoặcclass Foo { public function bar[] { $baz = "Bad"; // Unused } }
7class Foo { public function bar[] { $baz = "Bad"; // Unused } }
- Ví dụ
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
5Quy 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.
8class Foo { public function bar[] { $baz = "Bad"; // Unused } }
- 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.
9class Foo { public function bar[] { $baz = "Bad"; // Unused } }
- 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.
00class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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.
01class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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++;
}
}
0quy 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
Sử dụng biến Super global
- Tên quy tắc trong PHPMD.
02class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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
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 frameworkclass Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
Quy ước tên lớp
- Tên quy tắc trong PHPMD.
12class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Khi đặt tên lớp, hãy sử dụng
13. Quy tắc này cũng được cập nhật trong PSR-1class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Ví dụ
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
1Quy ước tên tài sản
- Tên quy tắc trong PHPMD.
14class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Khi đặt tên thuộc tính trong lớp, hãy sử dụng
15class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Ví dụ
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
8Quy ước tên phương thức
- Tên quy tắc trong PHPMD.
16class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Khi đặt tên cho một hàm, hãy sử dụng
15class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Ví dụ
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
1Tên thông số Quy ước
- Tên quy tắc trong PHPMD.
18class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Khi đặt tên tham số truyền vào trong phương thức, hãy sử dụng
15class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
Quy ước tên biến
- Tên quy tắc trong PHPMD.
80class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Khi đặt tên một biến, hãy sử dụng
15class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
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
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
- Tên quy tắc trong PHPMD.
83class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Sử dụng hàm
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ườngclass Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Ví dụ
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
9Về 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
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
- Tên quy tắc trong PHPMD.
86class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Việc sử dụng hàm
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ườngclass Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Ví dụ
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
3Về 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
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
- Tên quy tắc trong PHPMD.
89class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Việc sử dụng
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ụngclass 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ơnclass Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
Number of Class con
- Tên quy tắc trong PHPMD.
12class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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.
13class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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.
14class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- 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.
15class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Những chức năng như
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ôiclass Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
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
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
- Tên quy tắc trong PHPMD.
19class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Việc sử dụng
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àmclass 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ơnclass Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Ví dụ
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
50Sử 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.
93class Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Nội dung. Việc sử dụng các hàm như
94 hoặcclass 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 trongclass Foo { private static $BAR = 0; // Unused private $baz = 1; // Unused private $qux = 2; public function addOne[] { return $this->qux++; } }
- Ví dụ
class Foo
{
private static $BAR = 0; // Unused
private $baz = 1; // Unused
private $qux = 2;
public function addOne[]
{
return $this->qux++;
}
}
51Tổ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.