Phương pháp PSR là gì?

Trước Khuyến nghị về tiêu chuẩn PHP [PSR], không có tiêu chuẩn thực sự thống nhất nào để viết mã PHP. Ví dụ, đối với phong cách mã hóa, một số người thích Tiêu chuẩn mã hóa khung Zend và một số thích Tiêu chuẩn mã hóa PEAR, và những người khác vẫn chọn tạo quy ước đặt tên và phong cách mã hóa của riêng họ

Một nhóm người, đại diện cho các dự án PHP phổ biến khác nhau đã cùng nhau vào năm 2009 và thành lập một thứ gọi là Framework Interoperability Group [FIG]. Mục đích của FIG là để các đại diện dự án nói về những điểm chung giữa các dự án của họ và tìm cách làm việc cùng nhau

Tại thời điểm viết bài này, có sáu PSR được chấp nhận. hai trong số đó là về tự động tải, hai trong số đó liên quan đến phong cách viết mã PHP và phần còn lại là về giao diện

Trong chương này, chúng ta sẽ thảo luận ngắn gọn về từng PSR. Mục đích của chương này là giới thiệu cho bạn những ý tưởng về PSR. Để biết thêm chi tiết về từng cái, liên kết tương ứng được cung cấp

#PSR-0, PSR-4

Cả PSR-0 và PSR-4 đều là tiêu chuẩn để tải tự động. Nếu bạn không quen với autoloading, thì về cơ bản, đây là cách để PHP bao gồm các lớp mà không cần viết các câu lệnh

void __autoload [ string $class];
2 lộn xộn ở khắp mọi nơi

Chúng ta hãy nhìn vào lịch sử của autoloading. Điều này sẽ cung cấp cho bạn một bức tranh rõ ràng về việc tự động tải trong PHP đã tham gia như thế nào trong những năm qua

Trong ngôn ngữ PHP, chúng ta phải đảm bảo định nghĩa của một lớp được tải trước khi sử dụng nó. Thông thường, chúng tôi sẽ tạo các lớp PHP của mình trong các tệp lớp của riêng chúng để tổ chức tốt hơn. Sau đó, chúng tôi sẽ tải chúng bằng các câu lệnh

void __autoload [ string $class];
3 hoặc
void __autoload [ string $class];
4 trong các tệp mà chúng đang được gọi

include 'manager.php';
$manager = new Manager[];

Cách tiếp cận này nhanh chóng đặt ra một số vấn đề. Hãy tưởng tượng bạn có hàng chục lớp bên ngoài được sử dụng trong một tệp và bạn bắt đầu viết các dòng câu lệnh

void __autoload [ string $class];
5 ngay ở đầu tệp nguồn. Chúng xấu xí và làm lộn xộn cơ sở mã của chúng tôi với các dòng lệnh bao gồm lặp đi lặp lại

Bắt đầu từ PHP 5, một hàm ma thuật mới đã được giới thiệu để giải quyết vấn đề này

void __autoload [ string $class];

void __autoload [ string $class];
6 về cơ bản là một hàm trợ giúp, thực hiện những gì chúng ta đang làm với các câu lệnh bao gồm. Chúng ta có thể định nghĩa hàm này ở bất kỳ đâu trong cơ sở mã của mình và PHP sẽ tự động sử dụng hàm này để tải tệp của một lớp khi một lớp không xác định được gọi. Đây là cơ hội cuối cùng để tải một định nghĩa lớp trước khi PHP bị lỗi

function __autoload[$class]
{
    $filename = 'classes/' . $class . '.php';
    if [file_exists[$filename]] {
     include_once[$filename];
    }
}
$manager = new Manager[];

void __autoload [ string $class];
6 nhanh chóng trở nên lỗi thời do thực tế là nó chỉ có thể cho phép một chức năng tự động tải. Điều này có nghĩa là vì
void __autoload [ string $class];
1 là phép thuật duy nhất và duy nhất mà công cụ PHP sẽ gọi, chúng ta cần xác định chức năng phép thuật cụ thể này ở bất cứ nơi nào chúng ta muốn tính năng tự động tải. Về mặt lý thuyết, điều này bao gồm mọi tệp trong một cơ sở mã hướng đối tượng vững chắc

PHP5. 1. 2 đã được vận chuyển với một chức năng tự động tải khác [

void __autoload [ string $class];
2 ] để đối phó với giới hạn của
void __autoload [ string $class];
6.
void __autoload [ string $class];
2 là sự thay thế cho
void __autoload [ string $class];
6 và nó mang lại sự linh hoạt hơn. Nó hoạt động bằng cách đăng ký các hàm đất của người dùng PHP với hàng đợi tự động tải. Nó tạo một hàng đợi các chức năng tự động tải một cách hiệu quả và chạy qua từng chức năng theo thứ tự mà chúng được xác định. Điều này có nghĩa là chúng tôi có thể có nhiều hàm autoloader và không cần tạo hàm
void __autoload [ string $class];
1 trong mỗi tệp nguồn của chúng tôi nữa

Tự động tải là một ý tưởng tuyệt vời đến nỗi mọi dự án bắt đầu sử dụng nó. Chắc chắn mọi người đã tạo phiên bản autoloader của riêng họ vì thiếu các tiêu chuẩn thống nhất. Rõ ràng PHP rất cần một chuẩn cho autoloader, đó là cách mà PSR-0 ra đời

Ngày nay, tiêu chuẩn Autoloader đã phát triển đáng kể. Ngay cả PSR-0 cũng chính thức bị khấu hao do một số hạn chế, chẳng hạn như không thân thiện với Composer

Tiêu chuẩn trình tải tự động được chấp nhận mới nhất là PSR-4. Bạn nên làm theo PSR-4 để tạo trình tải tự động mong muốn của mình. Để biết thông số kỹ thuật của PSR-4, vui lòng đọc thêm từ trang chính thức của nó

#PSR-1, PSR-2

PSR-1 và PSR-2 dành cho các tiêu chuẩn mã hóa PHP. PSR-1 tập trung vào những điều cơ bản, trong khi PSR-2 mở rộng dựa trên PSR-1 và cung cấp hướng dẫn phong cách mã hóa toàn diện hơn

PSR-1 liệt kê một tập hợp các quy tắc đơn giản để đặt tên quy ước và cấu trúc tệp. Mục đích chính của nó là đảm bảo khả năng tương tác kỹ thuật cao giữa các mã PHP được chia sẻ. Trong một dự án được kết hợp với nhiều gói khác nhau, nó có thể trở thành một mớ hỗn độn nếu mỗi gói sử dụng tiêu chuẩn viết mã khác nhau, đây là điều mà PRS-1 được thiết kế để giải quyết

Tổng quan nhanh về PSR-1

  • Tệp PHẢI sử dụng chỉ
  • Các tệp PHẢI chỉ sử dụng UTF-8 không có BOM cho mã PHP
  • Các tệp NÊN khai báo các ký hiệu [lớp, hàm, hằng số, v.v. ] hoặc gây tác dụng phụ [e. g. tạo đầu ra, thay đổi. cài đặt ini, v.v. ] nhưng KHÔNG NÊN làm cả hai
  • Các lớp quảng cáo không gian tên PHẢI tuân theo PSR-0
  • Tên lớp PHẢI được khai báo trong StydlyCaps
  • Các hằng số của lớp PHẢI được khai báo bằng tất cả chữ hoa với dấu phân cách gạch dưới
  • Tên phương thức PHẢI được khai báo trong camelCase

Dựa trên PSR-1, PSR-2 cung cấp các hướng dẫn toàn diện hơn với các quy tắc chi tiết hơn, cơ bản như mã xác định. Nó cũng bao gồm các khía cạnh đa dạng của phong cách mã hóa, từ quy ước đặt tên đến không gian tên, lớp, thuộc tính, phương thức, cấu trúc điều khiển và bao đóng. Có thể tìm thấy bất kỳ thông số kỹ thuật nào bạn cần từ PSR-2. Điều chỉnh cơ sở mã của bạn theo tiêu chuẩn này để có khả năng tương tác rất được khuyến khích

#PSR-3, PSR-7

Sau khi các tiêu chuẩn mã hóa và tự động tải, cuối cùng chúng ta cũng có thể liên kết PSR với mã PHP. Đây là PSR-3 và PSR-7. PSR-3 chứa giao diện logger và PSR-7 chứa giao diện cho giao diện thông báo HTTP

PSR-3

PHP rất cần một tiêu chuẩn cho giao diện Logger trước PSR-3. Ghi nhật ký là một nhiệm vụ phổ biến đến nỗi mọi dự án đều xây dựng phiên bản ghi nhật ký của riêng mình. Nếu không có tiêu chuẩn, cách duy nhất để sử dụng trình ghi nhật ký của bên thứ ba là viết một trình bao bọc xung quanh nó, để nó có thể hoạt động với các cơ sở mã hiện có của chúng tôi. Đó không chỉ là một quá trình đau đớn mà còn cảm thấy sai lầm, bởi vì xét cho cùng, tất cả họ đều đang làm cùng một loại công việc. khai thác gỗ. Chúng ta sẽ có thể chuyển đổi chúng xung quanh

PSR-3 cung cấp giao diện chung cho các thư viện ghi nhật ký. Miễn là chúng triển khai giao diện bộ ghi PSR-3, về mặt lý thuyết, chúng có thể hoán đổi cho nhau với bất kỳ thư viện bộ ghi PSR-3 nào khác

Chúng ta hãy xem giao diện PSR-3 Logger cải thiện khả năng sử dụng lại mã của chúng ta như thế nào trong một ví dụ cụ thể

Giả sử chúng ta đã viết một lớp xác thực đơn giản Người dùng bên dưới. Nó nối thêm thông báo kiểm tra vào tệp nhật ký sau khi người dùng đăng nhập thành công. Nó đang sử dụng lớp trình ghi nhật ký tùy chỉnh của chúng tôi, hiển thị một phương thức duy nhất

void __autoload [ string $class];
7

________số 8

Lớp Logger tùy chỉnh của chúng tôi được đưa vào lớp Người dùng theo nguyên tắc tiêm phụ thuộc, điều này dường như làm cho Người dùng của chúng tôi có thể sử dụng lại. Chúng ta có thể chuyển sang lớp logger khác đơn giản thông qua hàm tạo. Nhưng nếu chúng ta xem xét kỹ, chúng ta không thể làm điều đó, lớp Người dùng vẫn được kết hợp chặt chẽ với lớp Logger tùy chỉnh của chúng ta, nó biết phương thức tùy chỉnh

void __autoload [ string $class];
7. Nếu chúng tôi sử dụng thư viện logger của bên thứ ba khác trong mã của mình, nó sẽ không hoạt động vì họ không có phương thức gọi là
void __autoload [ string $class];
7

Thay vào đó, chúng tôi có thể sửa đổi mã của mình để sử dụng giao diện Trình ghi PSR-3. Theo nguyên tắc Đảo ngược phụ thuộc RẮN, chúng ta nên phụ thuộc vào sự trừu tượng hơn là sự cụ thể hóa. Giao diện PSR-3 Logger cung cấp một bản tóm tắt hoàn hảo cho trường hợp của chúng tôi

void __autoload [ string $class];
1

Bằng cách thay đổi một vài dòng mã của chúng tôi, chúng tôi đã thay thế trình ghi nhật ký tùy chỉnh của mình bằng PsrLogLoggerInterface. Bây giờ mã của chúng tôi có khả năng tái sử dụng cao. Chúng tôi có thể sử dụng, chuyển sang hoặc thay đổi thành bất kỳ thư viện logger của bên thứ ba nào tương thích với giao diện PSR-3 Logger

PSR-7

Thông điệp HTTP rất cần thiết cho các ứng dụng web. Mọi hành động mà người dùng thực hiện là sự kết hợp giữa yêu cầu HTTP và phản hồi HTTP. PSR-7 là tiêu chuẩn được chấp nhận mới nhất. Nó cung cấp các bản tóm tắt xung quanh các thông báo HTTP và các phần tử cấu thành chúng. Nó sẽ có tác động rất lớn đến các dự án triển khai chi tiết thông điệp HTTP, vì HTTP là một chủ đề khá phức tạp và hầu hết các nhà cung cấp đều có cách triển khai riêng, nên các nhà cung cấp phải tái cấu trúc rất nhiều để điều chỉnh PSR-7

Là người dùng tin nhắn HTTP, giờ đây chúng tôi có thể xử lý các tin nhắn HTTP một cách phổ biến nhờ PSR-7. Tương tự như PSR-3, PSR-7 giúp cuộc sống của chúng ta dễ dàng hơn nhiều để xây dựng cơ sở mã có thể tái sử dụng

Chúng tôi đã tóm tắt ngắn gọn từng PSR và bây giờ bạn đã hiểu rõ mỗi PSR dùng để làm gì

Bạn nên tham khảo trang chính thức bất cứ khi nào bạn cần thông số kỹ thuật chi tiết của từng PSR

  • PSR-1. http. //www. php-fig. tổ chức/psr/psr-1/
  • PSR-2. http. //www. php-fig. tổ chức/psr/psr-2/
  • PSR-3. http. //www. php-fig. org/psr/psr-3/
  • PSR-4. http. //www. php-fig. org/psr/psr-4/
  • PSR-7. http. //www. php-fig. org/psr/psr-7/

#Kết thúc

Hy vọng rằng hướng dẫn đơn giản này đã giúp bạn phát triển. Nếu bạn thích bài đăng của chúng tôi, vui lòng theo dõi chúng tôi trên Twitter và giúp truyền bá thông tin. Chúng tôi cần sự hỗ trợ của bạn để tiếp tục. Chúng tôi đã bỏ lỡ bất cứ điều gì?

PSR là gì?

PSR là Ra đa giám sát chính . Radar sơ cấp là? . Một hệ thống phát hiện vô tuyến truyền các đợt [xung] năng lượng RF ngắn và phát hiện tiếng vang của chúng từ các vật thể [mục tiêu] như máy bay hoặc tàu.

PSR trong DNA là gì?

Phản ứng xoắn ốc polymerase [PSR]. Một phương pháp khuếch đại axit nucleic đẳng nhiệt mới.

Tuân thủ PSR là gì?

PSR mô tả thời điểm tổ chức của bạn cần xem xét các biện pháp bảo mật cụ thể để tuân thủ các yêu cầu bắt buộc .

PSR 4 là gì và lợi ích của việc sử dụng nó là gì?

PSR này mô tả thông số kỹ thuật để tự động tải các lớp từ đường dẫn tệp . Nó hoàn toàn có thể tương tác và có thể được sử dụng cùng với bất kỳ thông số kỹ thuật tải tự động nào khác, bao gồm cả PSR-0. PSR này cũng mô tả nơi đặt các tệp sẽ được tải tự động theo thông số kỹ thuật.

Chủ Đề