Php bao gồm nhiều tệp
Chúng ta đều biết PHP là ngôn ngữ kịch bản, nghĩa là trong quá trình thực thi một ứng dụng PHP, sẽ không có bước biên dịch cái mã nguồn PHP sang a,b,c,x,y,z gì cả. Thay vào đó, chúng ta sẽ có một trình thông dịch nó sẽ đọc qua cái mã nguồn PHP của chúng ta từ trên xuống và thực thi các dòng lệnh Show Giả sử ta có một đoạn mã chứa hàm do người dùng định nghĩa như sau, đặt trong tệp 2
Để chạy nó, ta đơn giản chỉ định cho trình thông dịch của php thực thi tệp này
1. 2 Mã trong nhiều tệpViệc đặt tất cả mã trong một tệp sẽ làm cho tệp ngày càng dài hơn và tới một mức độ sẽ rất khó để duy trì cũng như quy mô. Việc chia nhỏ mã nguồn ra thành nhiều tệp trở thành một nhu cầu tất yếu. Tính năng PHP đã phát triển để hỗ trợ chia nhỏ công việc này 1. 2. 1. bao gồmsau khi được bao gồm, tất cả các hàm và lớp được xác định trong tệp được bao gồm đều có phạm vi toàn cầu With include, ví dụ bên trên sẽ được viết lại như sau
1. 2. 2 yêu cầu 3 thì cũng cho ta tính năng giống gương như 4, khác là với yêu cầu, nếu như ta yêu cầu một tệp mà nó không tồn tại, thì ứng dụng sẽ được tiếp tục, trong khi bao gồm, ứng dụng sẽ vẫn chạy tiếp, nếu 1. 2. 3 yêu cầu_một lần & bao gồm_một lần 5 và 6 cũng tương tự như 4 và 3 ở trên, chỉ khác là nếu tệp đã được yêu cầu/bao gồm rồi, thì nó sẽ không yêu cầu/bao gồm nữa2. Tự động tải bằng PHP gốcGiả sử ta có một ứng dụng với 2 mã tệp như thế này
Ta sử dụng nó trong tệp 2
Mọi thứ trong đó vẫn rất sạch sẽ, nhưng hãy thử các đối tượng, chúng ta có khoảng vài chục lớp cần sử dụng, tất cả những thứ này đều đồng nghĩa, là một danh sách yêu cầu rất dài ở mỗi tệp đầu, kiểu như rách
Về mặt lý thuyết thì nó không sai, chỉ là mọi người vẫn tự hỏi là có cách nào rút gọn mà vẫn đạt được cùng một kết quả không? 2. 1 spl_autoload_registerTính năng mà chức năng này hỗ trợ, rất rõ ràng và đơn giản. Mỗi khi một lớp được sử dụng trong tệp, và trình dịch thất bại trong quá trình tìm kiếm định nghĩa của lớp, nó sẽ gọi cái spl_autoload_register này, để thử thêm một lần nữa Ví dụ bên trên của chúng tôi sẽ được viết lại như sau
Đoạn mã bên trên được đọc như sau, nếu không tìm thấy lớp Người, thì hãy thử yêu cầu tệp có tên là tên của lớp Người cộng với hậu tố 0, tương đối với tệp hiện tại3. Trình soạn nhạc tự động tảiThay vì phải autoloader tự động, bây giờ chúng ta sẽ sử dụng tính năng autoload do Composer cung cấp các ví dụ dưới đây sẽ giả định là bạn đã cài đặt nhà soạn nhạc 3. 1Bây giờ chúng ta hãy thử viết lại ví dụ ban đầu, 1, nhưng bằng việc sử dụng nhà soạn nhạc. Sẽ vẫn là 2 tập tin quen thuộc
And use it at file 2
Bây giờ, ta sẽ thay thế dòng 3 bằng một thứ khác. Đầu tiên, hãy tạo một tệp 4 với nội dung như sau 0Sau đó, chạy câu lệnh 1Lúc này, ta sẽ nhận được một thư mục 5 có cấu trúc như sau 2Do chúng ta đang sử dụng tính năng autoload file, nên chúng ta sẽ chỉ quan tâm đến file 6, thử mở ra xem có gì trong đó 3Ta sẽ thấy một cái gì đó đại khái là có đường dẫn đi tới tập tin 7. Bây giờ, để sử dụng, ta sẽ cập nhật lại nội dung của tệp 2 như sau 4Giờ thì chạy 9 cũng sẽ cho ta kết quả tương tựTa sẽ tự hỏi là nó có gì khác so với cách làm trước? . (mỗi tập tin cần cập nhật 4 sẽ phải chạy lại câu lệnh 3)3. 2Để demo cho tính năng autoload class này, đầu tiên ta cần chuẩn bị sẵn một folder classes, trong đó có file Person. php with content code tương tự như ví dụ ở trên 5Sau đó, chúng ta sẽ cập nhật lại file 4 như sau 6Sau đó, chạy câu lệnh 5, lúc này ta mở file 6 xem có gì trong đó 7Ta lại thấy thứ đó, đại loại là đường dẫn đi tới tệp Người. php Bây giờ chúng ta hãy thử sử dụng class Person đó, một điều thú vị là ta không cần phải động gì đến chỗ yêu cầu, cứ việc sử dụng class Person thôi, mọi thứ đã có nhà soạn nhạc lo 8Tới đây, sau khi chạy 9, ta sẽ vẫn nhận được kết quả tương tự3. 3PSR-4 là cách được khuyến nghị vì nó dễ sử dụng hơn (không cần tạo lại trình tải tự động khi bạn thêm lớp) Sử dụng cái psr-4 này, thì mỗi lớp thêm một lần, ta sẽ không cần phải chạy lại câu lệnh 5Đây cũng chính là nội dung chính của bài viết lần này, có thể được coi là trạng thái nghệ thuật của php autoload. Ok, giờ chúng ta bắt đầu trải nghiệm thử nghiệm tính năng này. Cập nhật lại file 4 có nội dung như sau. (cập nhật xong thì chạy 5) 9Tạo thư mục app, trong thư mục app sẽ tạo thư mục Models và trong thư mục Models sẽ tạo file Person. php 0Content of file Person. php could Rút gọn như sau 1Trong file index. php, ta try to use it 2Tới đây, mọi thứ vẫn như cũ, chỉ khác một điều, là giờ ta thử tạo thêm thư mục và tệp, thì không cần phải chạy lại câu lệnh 5, việc ta cần làm, là thư mục theo một quy tắc |