Php Autoload Classes Làm Việc Với Composer Trong Php Như Thế Nào

Hm, lâu rồi mình cũng không viết bài nào mới. Chủ yếu là do dạo này tập ngủ sớm mà lại đi làm về khá muộn nên leo lên giường đi ngủ luôn đâm cũng lười. Đây hứa hẹn sẽ là lần trở lại của mình đầy ăn hại lợi hại của mình .Bạn đang xem : Autoload classes thao tác với composer trong php như thế nào

Mình sẽ bắt đầu một series mới là PHP có thể bạn chưa biết. Lý do để bắt đầu series này là vì mình thích thì mình viết thôi.

Đây là bài đầu tiên (hi vọng sẽ có bài thứ 2 – LOL) trong series. Trong bài này mình sẽ giới thiệu về Autoloading trong PHP

Autoloading là gìAutoloading là gìTrước khi vào autoload là gì thì mình sẽ nói về việc không có autoload trước. Mình có một ví dụ sau .*File app / Controllers / Model. php :attributes = $ attributes ; echo ” Filling attributes : “. json_encode ( $ attributes ). PHP_EOL ; } public function save ( ) { echo static :: class. ” have been saved “. PHP_EOL ; } public static function create ( USD attributes = < > ) { $ instance = new static ( $ attributes ) ; USD instance -> save ( ) ; return USD instance ; } } File app / Controllers / Post. php :File app / Controllers / PostController. php” Blah blah “, ” content ” => ” Bloh, bloh ” > ) ; } } Nội dung của file index.php như saustore ( ) ; Cơ bản thì khi tất cả chúng ta gọi tới file index.php, File này sẽ khởi tạo class App \ Controller \ PostController và gọi vào method store của PostController. Trong method PostController :: store sẽ khởi tạo một post với title và content được truyền vào .Như những bạn đã biết, hoặc chưa biết thì khi tất cả chúng ta chạy thử bằng lệnhphp index. phpsẽ nhận được một lỗi như sau*Lỗi này là do PHP không tìm thấy class App \ Controller \ PostController do tất cả chúng ta thiếu lệnh require những class này trước khi gọi. Giờ tất cả chúng ta sẽ triển khai sửa lỗi này. Để phức tạp hóa yếu tố, thì mình sẽ tạo một file mới là autoload.php. File này đơn thuần sẽ gọi lệnh require cho toàn bộ những file tất cả chúng ta cần sử dụng .và require file autoload.php vào trong file index.phpstore ( ) ; Thử chạy lại xem sao

php index.php

*Ok, ngon, đã chạy .Ơ thế nó tương quan qué gì tới autoload. Như những bạn thấy thì khi muốn dùng class hoặc function hoặc variable từ file khác thì tất cả chúng ta phải thực thi load file đó vào trước khi sử dụng. Nếu với những dự án Bất Động Sản nhỏ thì không sao, nhưng với những dự án Bất Động Sản lớn hàng trăm, hàng nghìn classes thì việc maintain những đoạn code load file là một việc làm cực kỳ stress và nhàm chán. Vậy là autoload sinh ra. Nôm na thì autoload là một cách dành cho người lười dùng để load những class trong PHP một cách tự động hóa dựa vào cấu trúc thư mục và tên class .Trăm nghe không bằng một thấy, trăm thấy không bằng một thử, lại liên tục ví dụ tiếp cho những bạn dễ tưởng tượng .Xem thêm : Thực Hiện Ngay Những Bí Quyết Để Sống Vui Khỏe Mỗi Ngày, Bí Quyết Sống Vui, Sống Khỏe Tươi Trẻ Mỗi NgàyGiờ mình sẽ chỉnh sửa lại file autoload.php thànhNhư những bạn thấy thì, hàng loạt những namespace của mình trong code ví dụ đều có prefix là App \ \ và nằm trong thư mục app /. Trong function my_app_autoloader sẽ nhận vào tên rất đầy đủ của class cần được load ví dụ App \ Controllers \ PostController, mình thực thi bỏ đi prefix chỉ giữ lại phần phía sau, mình sẽ được một chuỗi là Controllers \ PostController đây là chuỗi tương tự với tên một thư mục và tên file. Mình triển khai thanh thế dấu ngăn cách namespace \ thành dấu ngăn cách folder DIRECTORY_SEPARATOR và nối thêm định dạng file (. php ). Việc còn lại chỉ là kiểm tra đường dẫn Controllers / PostController. php có trong thư mục app / không và dùng lệnh require_once để load file lên .Đây là tác dụng .*Vậy là tất cả chúng ta đã có một autoloader đơn thuần. Từ giờ khi bạn muốn thêm một class mới chỉ cần đặt tên file và namspace theo cấu trúc thư mục là tất cả chúng ta hoàn toàn có thể không cần phải chú ý gì tới việc load file .Trên đây mình đã trình làng về autoload những class trong PHP. Đấy là thực chất của kỹ thuật này, giúp những bạn hoàn toàn có thể hiểu được cách mà cách thư viện, Framework đã load file một cách tự động hóa lên như thế nào mà không cần tới hàng nghìn lệnh require .Autoload bằng composerAutoload bằng composerComposer là một công cụ dùng để quản trị dependencies trong PHP, ngoài việc quản trị dependencies, những bạn hoàn toàn có thể dùng để ĐK việc autoload những thư viện của mình, mà không cần viết thêm những custom method để load file như trong ví dụ trước. Vẫn sử dụng tiếp ví dụ trước. Mình sẽ load những file này một cách tự động hóa bằng cách dùng composer .Mình khai báo một file composer.json như sau .{ ” autoload ” : { ” psr-4 ” : { ” App \ \ ” : ” app / ” } } } sau đó mình triển khai dump-autoload bằng lệnh composer dump-autoload composer sẽ thực thi tạo thư mục vendor và vendor / autoload.php giờ mình sửa lại file index.php để require file vendor / autoload.php của composer vừa tạo ra .

store();Done! Chạy thử và kết quả y chang, nhưng chúng ta không phải thêm bất kỳ một custom function nào mà dùng composer như một autoloader.

Composer tương hỗ tất cả chúng ta 4 cách khai báo autoload. Bao gồm PSR-4, PSR-0, classmap và files .PSR-4 và PSR-0 là cách chuẩn PSR về cách đặt tên file và thư mục theo quy tắc cho những PHP Framework, PSR-4 là chuẩn thay thế sửa chữa cho PSR-0. classmap là được cho phép load hàng loạt những class có trong một thư mục chỉ định. và files được cho phép chỉ định load những file được khai báo. Dưới đây là 1 số ít ví dụ về những cách khai báo với composer.json{ ” autoload ” : { ” psr-4 ” : { ” App \ \ ” : ” app / ” }, ” psr-0 ” : { ” Monolog \ \ ” : ” src / “, ” Vendor \ \ Namespace \ \ ” : ” src / “, ” Vendor_Namespace_ ” : ” src / ” }, ” classmap ” :, ” files ” : } } Các bạn vui mừng đọc cụ thể tại https://getcomposer.org/doc/04-schema.md#autoload