PHP类的自动加载机制实现方法分析

这篇文章主要介绍了PHP类的自动加载机制实现方法,结合实例形式分析了__autoload方法进行类自动加载操作的相关实现技巧与使用注意事项,需要的朋友可以参考下。

本文实例讲述了PHP类的自动加载机制实现方法,分享给大家供大家参考,具体如下:

Test1.class.php

  1. <?php
  2. class Test1
  3. {
  4. public static function test() {
  5. echo "hello,world!\n";
  6. }
  7. }

Test2.class.php

  1. <?php
  2. class Test2
  3. {
  4. public static function test() {
  5. echo "你好,世界!\n";
  6. }
  7. }

test.php

Test1::test();

如果直接写,会报错

Fatal error: Class 'Test1' not found in /home/wwwroot/default/codelabs/test.php on line 3

需要引入文件

  1. <?php
  2. require "Test1.class.php";
  3. Test1::test();

这样就可以访问了。

但是,如果类越来越多,引入的代码就越来越多。

这个时候需要使用__autoload方法。

  1. <?php
  2. Test1::test();
  3. function __autoload($class) {
  4. //require "Test1.class.php";
  5. //require "Test2.class.php";
  6. require __DIR__."/".$class.".class.php"; // __DIR__是当前目录的绝对路径
  7. }

当程序发现没有引入类时,会自动调用这个方法,引入类文件。

进一步优化升级,支持多个自动加载。

  1. <?php
  2. spl_autoload_register('__autoload1');
  3. spl_autoload_register('__autoload2');
  4. Test1::test();
  5. Test2::test();
  6. // 当检测到无类加载时,会自动调用这个方法
  7. function __autoload1($class) {
  8. //require "Test1.class.php";
  9. //require "Test2.class.php";
  10. require __DIR__."/".$class.".class.php"; // __DIR__是当前目录的绝对路径
  11. }
  12. function __autoload2($class) {
  13. //require "Test1.class.php";
  14. //require "Test2.class.php";
  15. require __DIR__."/".$class.".class.php"; // __DIR__是当前目录的绝对路径
  16. }

很好,很强大!