⊗ppOpNsCA 107 of 107 menu

Hàm tự động tải lớp tự tạo trong OOP PHP

Thông thường, chức năng tự động tải mặc định có thể không phù hợp với bạn vì một số lý do. Trong trường hợp như vậy, bạn có thể tự viết hàm tự động tải của mình.

Để làm điều này, cần truyền hàm callback do bạn viết vào tham số đầu tiên của hàm spl_autoload_register. Hàm này sẽ được gọi khi PHP phát hiện có yêu cầu truy cập vào một lớp chưa được tải. Tên lớp kèm namespace sẽ được truyền vào tham số của hàm này:

<?php spl_autoload_register(function($class) { // biến $class sẽ chứa tên lớp cùng với namespace }); ?>

Và nhiệm vụ của hàm là dựa trên tên lớp để thực hiện tải lớp đó thông qua require. Tức là bên trong hàm này, chúng ta cần viết quy tắc tải lớp riêng, hay nói cách khác là quy ước đặt tên riêng của chúng ta.

Hãy viết một ví dụ về hàm tự động tải tự tạo. Giả sử, ví dụ chúng ta quy định rằng đường dẫn đến tệp lớp tính từ thư mục gốc của trang web sẽ giống với namespace, nhưng giữ nguyên chữ hoa chữ thường.

Tức là, nếu chúng ta có lớp Core\Admin\PageController, thì đường dẫn đến nó phải là Core/Admin/PageController.php.

Như bạn thấy, để chuyển đổi tên lớp cùng namespace của nó, chỉ cần đổi dấu gạch chéo ngược thành dấu gạch chéo xuôi, và thêm .php vào tên lớp. Hãy thực hiện điều đó:

<?php spl_autoload_register(function($class) { $filename = str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Tuy nhiên, chúng ta sẽ có đường dẫn tương đối đến tệp (tương đối so với thư mục gốc trang web). Tốt hơn nên tạo đường dẫn tuyệt đối, như thế này:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $filename = $root . '/' . str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Còn một điểm cần lưu ý. Trên các hệ điều hành khác nhau, đường dẫn thư mục có thể sử dụng dấu gạch chéo xuôi hoặc dấu gạch chéo ngược. Hãy làm cho mã của chúng ta độc lập với hệ điều hành. Để làm điều này, thay vì dấu gạch chéo xuôi để phân tách đường dẫn, chúng ta sẽ sử dụng hằng số DIRECTORY_SEPARATOR, chứa dấu phân cách đường dẫn đúng cho hệ điều hành mà script của chúng ta đang chạy. Cuối cùng, chúng ta có mã như sau:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $ds = DIRECTORY_SEPARATOR; $filename = $root . $ds . str_replace('\\', $ds, $class) . '.php'; require($filename); }); ?>

Hãy thử nghiệm hàm tự động tải do tôi tạo.

Hãy nghĩ ra quy tắc tự động tải của riêng bạn và triển khai nó.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối