Hàm __autoload() trong PHP là một hàm được gọi khi khởi tạo một đối tượng không xác định.
Hàm này được sử dụng trên PHP5 và PHP7.
Cảnh báo
Trong phiên bản PHP 7.2 hàm này đã không còn được khuyên dùng nữa, thay vào đó hãy sử dụng hàm spl_autoload_register().
Cú pháp
Cú pháp hàm __autoload() trong PHP như sau:
__autoload ( string $class
) : void
Tham số truyền vào
- $
class
là tên class muốn tải.
Giá trị trả về
Hàm này không có giá trị trả về
Ví dụ minh họa
function __autoload($className)
{
echo 'Class name construct: ' . $className;
}
class Human
{
public function __construct()
{
echo 'Class Human';
}
}
$human = new Human();
//return Class Human
Với ví dụ trên bạn có thể thấy với class được định nghĩa rõ ràng thì hàm __autoload sẽ không được chạy. Vậy ở ví dụ 2 thì sao ?
function __autoload($className) { echo 'Class name construct: ' . $className; } } $human = new Human(); //return Class name construct Human
Ở ví dụ 2 này bạn có thể thấy khi class không được định nghĩa rõ ràng thì hàm __autoload sẽ được chạy.
Ứng dụng
Bạn có thể sử dụng __autoload() include file class nhanh hơn đồng thời giúp code dễ đọc hơn.
********* TRƯỜNG HỢP BẠN SỬ DỤNG __autoload() ************* ./myClass.php //Bạn định nghĩa một class myClass trong file myClass.php <?php class myClass { public function __construct() { echo "myClass init'ed successfuly!!!"; } } ?> ./index.php //File index để chạy chương trình chính <?php // Bạn định nghĩa lại class __autoload để include file function __autoload($classname) { $filename = "./". $classname .".php"; include_once($filename); } // Khi đó bạn chỉ cần gọi khởi tạo class như bình thường $obj = new myClass(); ?> ********* TRƯỜNG HỢP BẠN KHÔNG SỬ DỤNG __autoload() ************* <?php include_once("./myClass.php"); include_once("./myFoo.php"); include_once("./myBar.php"); $obj = new myClass(); $foo = new Foo(); $bar = new Bar(); ?>
Ở ví dụ này cơ bản bạn đã hiểu cách sử dụng hàm __autoload(), code ngắn hơn dễ hiểu hơn.
Tuy nhiên ở từ phiên bản PHP 7.2 hàm __autoload() đã không còn được khuyến cáo sử dụng nữa, vì vậy bạn có thể sử dụng hàm sau spl_autoload_register() để thay thế.
<?php if(!function_exists('classAutoLoader')){ function classAutoLoader($class){ $class=strtolower($class); $classFile=$_SERVER['DOCUMENT_ROOT'].'/include/class/'.$class.'.class.php'; if(is_file($classFile)&&!class_exists($class)) include $classFile; } } spl_autoload_register('classAutoLoader'); ?>
Các hàm liên quan
- Hàm spl_autoload_register() một hàm thay thế cho hàm __autoload().
Hi vọng với bài viết này, bạn đã hiểu rõ cách sử dụng hàm __autoload() trong PHP. Nếu thấy bài viết hay và ý nghĩa, hãy like và chia sẻ với bạn bè để mọi người cùng nhau học tập nhé.
Cảm ơn bạn đã ghé thăm codetutam.com