Từ khóa cuối cùng trong php

Từ bản PHP 5 trở đi có giới thiệu về từ khóa cuối cùng, từ khóa này sẽ ngăn không cho lớp con ghi đè phương thức bằng cách đặt trước định nghĩa phương thức mà từ khóa cuối cùng. Nếu lớp thân được định nghĩa là cuối cùng thì nó không cho phép kế thừa

Bộ quy tắc này được tạo ra để giảm thiểu những khó khăn trong việc đọc mã của người khác. Nó thực hiện điều đó bằng cách đặt ra những quy định hay gợi ý về công việc định dạng mã PHP

  1. General General

1. 1. Ví dụ

Ví dụ dưới đây bao gồm một số quy tắc đã được cập nhật ở phần trên, tổng quan


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
4

  1. Total could

2. 1 Tiêu chuẩn mã hóa cơ bản

Mã phải tuân theo "hướng dẫn kiểu viết mã" PSR [PSR-1]

2. 2 tệp

Tất cả các tệp PHP phải sử dụng kết thúc dòng Unix LF (linefeed)

Mọi tệp PHP phải kết thúc bằng một dòng trống

Trong một file chỉ bao gồm code PHP thì không được viết tag close


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}
5

2. 3. dòng

Không có giới hạn cứng về độ dài của một dòng

Giới hạn mềm của độ dài một dòng phải là 120 chữ. Check style chương trình tự động phải báo cảnh báo nhưng không được báo lỗi khi vượt quá giới hạn mềm

One line should have not too 80 chữ. Dòng mà dài quá 80 chữ thì nên chia nhỏ ra thành nhiều dòng với độ dài mỗi dòng không quá 80 chữ

Một dòng không trống không được phép có khoảng trắng ở cuối (dấu cách ở cuối dòng)

Dòng trống có thể được thêm vào để mã có thể dễ đọc hơn và để phân chia các đoạn mã

There is not allow too a statement on a line

2. 4. Canh lề - Indenting

Mã không sử dụng tab, mà phải sử dụng 4 dấu cách thụt lề

2. 5. Keywords và True/False/Null

Những từ khóa của PHP phải được viết bình thường. (không viết hoa)

Những hằng số của PHP là


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}
6,

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}
7, và

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}
8 cũng cần phải viết thường

  1. Khai báo Namespace và Use

Cần phải có một dòng phía trước sau báo cáo


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
1

Những phần báo cáo


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
2 phải được đặt phía sau phần báo cáo

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
1

You must use a from


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
2 for each khao khát

Phải có một dòng phía trước mã sau đoạn mã


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
2

Ví dụ


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
4

  1. Lớp, Thuộc tính và Phương thức

Từ lớp dưới đây được hiểu là cả những lớp bình thường, hay cả giao diện và đặc điểm

4. 1. Mở rộng và Triển khai

Từ khóa


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
54 và

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
55 phải được viết cùng dòng với tên lớp

Back off the class must be on a private line. Dấu đóng dấu phải được viết ở dòng sau của phần nội dung


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}

Danh sách những giao diện được


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
55 có thể được viết trên nhiều dòng, trong đó mỗi dòng theo sau được thụt lề 1 lần. Khi thực hiện công việc đó thì tên giao diện đầu tiên phải được đặt trên 1 dòng mới và mỗi dòng chỉ được phép chứa 1 tên giao diện


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}

4. 2. Của cải

Tính năng Hiển thị phải được khai báo ở mọi thuộc tính

Không được sử dụng từ khóa


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
57 để khai báo một thuộc tính

Trong một câu thì không được khai báo quá một thuộc tính

Tên thuộc tính không nên được thêm tiền tố bởi dấu gạch dưới


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
58 để biểu thị tính chất được bảo vệ hoặc riêng tư

Khai báo thuộc tính giống như sau


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
5

4. 3. phương pháp

Tính năng hiển thị phải được khai báo ở mọi nơi

Tên Phương thức không nên được thêm tiền tố bởi dấu gạch dưới


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
58 để biểu thị tính chất được bảo vệ hoặc riêng tư

Khi khai báo tên phương thức thì không được để khoảng trống phía sau tên phương thức. Dấu mở nút phải được đặt trên một dòng riêng, và dấu đóng dấu phải được đặt trên dòng ngay sau phần thân của phương thức. Cannot have khoảng trắng sau dấu mở vòng, và không có khoảng trắng phía trước dấu đóng mở vòng

Khai báo một hàm giống như sau. Chú ý đến vị trí của dấu ngoặc đơn, dấu phẩy, khoảng trống và dấu ngoặc kép


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
4

4. 4. Đối số phương pháp

Trong danh sách đối số (đối số) thì không có khoảng trống trước mỗi dấu phẩy, và phải có khoảng trắng sau mỗi dấu phẩy

Những đối số của Phương thức mà giá trị mặc định phải được đặt ở cuối danh sách đối số


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
5

Đối số danh sách có thể được tách thành nhiều dòng, trong đó mỗi dòng theo sau được thụt lề một lần. Khi làm như vậy, đối số đầu tiên trong danh sách phải được đặt trên một dòng mới và mỗi dòng chỉ được phép có một đối số

Khi mà đối số danh sách được chia làm nhiều dòng, thì dấu đóng ngoặc tròn và dấu mở ngoặc phải được đặt giống nhau trên một dòng, với một khoảng trắng ở giữa


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
6

4. 5.

Khi được sử dụng,


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
6 và

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
7 phải được đặt trước phần khai báo khả năng hiển thị

Khi được sử dụng,


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
8 phải được đặt sau phần khai báo khả năng hiển thị


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
3

4. 6. Gọi Phương thức và Chức năng

Khi gọi một phương thức hay một hàm, không được phép có khoảng trắng giữa tên của phương thức hay hàm và dấu mở vòng. Cannot allowable Whitespace after the open key. And not allow have khoảng trắng trước dấu đóng vòng. Trong đối số danh sách, không được phép có khoảng trống trước mỗi dấu phẩy, và phải có khoảng trắng sau mỗi dấu phẩy


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
4

Đối số danh sách có thể được tách ra thành nhiều dòng, trong đó mỗi dòng theo sau được thụt lề một lần. Khi làm như vậy, đối số đầu tiên phải được đặt trên một dòng mới và mỗi dòng chỉ được phép chứa một đối số


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
40

  1. Cấu trúc điều khiển

Những quy tắc chung khi viết Control Structures bao gồm

  • must have a space space after control structure keyword
  • Unable to a white space after the open key
  • Cannot have a white distance before the close
  • You must have a white distance after close the extractor and before the open extractor
  • Phần thân của cấu trúc phải được thụt lề một lần
  • Dấu đóng cắt phế thải được đặt trên một dòng mới sau phần thân

Phần thân của mỗi cấu trúc phải được đặt trong dấu ngoặc kép đóng mở. Điều này sẽ làm tiêu chuẩn hóa cách viết cấu trúc và giảm thiểu việc phát sinh lỗi khi có những dòng mới được thêm vào phần thân

5. 1.

Một cấu trúc


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
9 được viết như sau. Please note to the position of the khoanh tròn, khoảng trắng, dấu ngoặc.

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}
0 và

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
47 được đặt trên cùng một dòng với dấu đóng ngoặc nhọn của phần thân phía trước


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
41

Từ khóa


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
47 nên được sử dụng thay cho

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
53, để mọi từ khóa điều khiển chỉ là một từ đơn

5. 2.

Một cấu trúc


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
54 được viết như sau. Please note to the position of the khoanh tròn, khoảng trắng và dấu ngoặc nhọn. Phần

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
55 phải được thụt lề một lần so với

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
54, và từ khóa

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
59 (hay các từ khóa ngắt khác) phải được thụt lề giống với phần thân của

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
55. Phải có một nhận xét kiểu như

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
61 nếu phần thân của

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
55 không trống, và được cố tình cho qua (không có ngắt)


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
42

5. 3.

Một câu lệnh


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
63 được viết như sau. Please note on the position of the khoanh tròn, khoảng trắng và dấu ngoặc kép


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
43

Tương tự như vậy, một câu lệnh


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
64 được viết như sau. Please note on the position of the khoanh tròn, khoảng trắng và dấu ngoặc kép


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
44

5. 4.

Một câu lệnh


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements
    \ArrayAccess,
    \Countable,
    \Serializable
{
    // constants, properties, methods
}
1 được viết như sau. Vui lòng chú ý vào vị trí của dấu chấm than, dấu ngoặc tròn, khoảng trắng và dấu ngoặc nhọn


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
45

5. 5.

Một câu lệnh


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
69 được viết như sau. Please note into the position of

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
31, acircle mark, void gap and


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
46

5. 6.

Một khối


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
34 được viết như sau. Please note on the position of the khoanh tròn, khoảng trắng và dấu ngoặc kép


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
47

  1. đóng cửa

Các lần đóng cửa phải được định nghĩa mới là một khoảng trắng phía trước sau keywork


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
35, và một khoảng trắng phía trước cũng như phía sau của keywork

namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
2

Dấu mở đầu phải được đặt ở cùng một dòng, và dấu ngoặc nhọn phải được đặt ở một dòng dẫn phía sau phần thân

Không được phép có một khoảng trắng ở phía sau dấu mở giải nén của phần khai báo danh sách đối số hay biến, và không được phép có một khoảng trắng ở phía trước dấu đóng giải nén của phần khai báo danh sách đối số hay biến

Trong danh sách đối số hay biến, không được phép có khoảng trống trước mỗi dấu phẩy, và phải có khoảng trống phía sau mỗi dấu phẩy

Arguments of Closure which has default value, must be set at the end of the argument list

Cách định nghĩa một sự đóng cửa trông giống như sau

Một tuyên bố đóng cửa trông giống như sau. Please note into the position of the quote command


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
48

Đối số danh sách và biến danh sách có thể được tách ra thành nhiều dòng, trong đó mỗi dòng theo sau được thụt lề một lần. Khi làm như vậy, đối số hay biến đầu tiên phải được đặt trên một dòng mới, và mỗi dòng chỉ được phép chứa một đối số hay một biến

Khi các kết thúc của danh sách (cả đối số hoặc biến) được chia thành nhiều dòng, thì dấu đóng ngoặc tròn và dấu trích dẫn phải được đặt giống nhau trên một dòng, với khoảng trống ở giữa

Dưới đây là những ví dụ về các bao đóng có và không có danh sách đối số hay biến được chia thành nhiều dòng


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
49

Chú ý rằng các quy tắc trên còn được áp dụng khi một bao đóng được sử dụng các bộ phận tiếp theo như một đối số trong một lời gọi hàm hay phương pháp


namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
    // constants, properties, methods
}
0

  1. Kết luận

Có rất nhiều yếu tố về phong cách hay thực hành khác bị cố tình loại bỏ trong hướng dẫn này. There are could not be like

  • Khai báo biến global (biến toàn cục) hay hằng global (hằng số toàn cục)

  • Khai báo hàm (function)

  • Toán tử và phép gán

  • Căn chỉnh giữa các dòng

  • Khối Bình luận và Tài liệu

  • Tiền tố và hậu tố trong tên Lớp

  • Thực hành tốt nhất

Những đề xuất sau đây có thể xem xét lại và mở rộng hướng dẫn này để đề cập đến những yếu tố thành phần về phong cách hay thực hành ở trên hay hoàn toàn khác