Home >php教程 >php手册 >PHP基础之Autoload

PHP基础之Autoload

WBOY
WBOYOriginal
2016-06-21 08:48:321065browse

PHP的自动加载autoload机制很重要,这里做2个小练习

 

原创文章,转载请注明:http://www.cnblogs.com/phpgcs

 

文件结构如下,2种方式实现自动加载

 

1,自定义函数

 

2,spl_autoload_register()

 

 

liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ ll ./*

-rw-rw-r-- 1 liuyuan liuyuan  800 Feb 19 11:39 ./func_autoload.php

-rw-rw-r-- 1 liuyuan liuyuan  906 Feb 19 11:28 ./spl_autoload.php

 

./include:

total 16

drwxrwxr-x 2 liuyuan liuyuan 4096 Feb 19 11:42 ./

drwxrwxr-x 3 liuyuan liuyuan 4096 Feb 19 11:43 ../

-rw-rw-r-- 1 liuyuan liuyuan  142 Feb 19 11:42 aClass.php

-rw-rw-r-- 1 liuyuan liuyuan  143 Feb 19 11:42 bClass.php

  

 

首先看自定义函数方式:

 

    define('EOL', (PHP_SAPI == 'cli') ? PHP_EOL : ' br>');

    print_r(get_included_files());

    echo EOL;

    print get_include_path();

    echo EOL;

    //set_include_path(get_include_path().PATH_SEPARATOR.'/var/www/ly_php/php_spl/include/');

    //set_include_path(dirname(__FILE__).'/include');

    //set_include_path(dirname(__FILE__).'/include/');

 

    function __autoload($className){

        $filename = './include/'.$className.'.php';

        //$filename = './include/'.$className.'.php';

        //$filename = '/var/www/ly_php/php_spl/include/'.$className.'.php';

        if(file_exists($filename)){

            include_once $filename;

        }else{

            exit('no file');

        }

    }

 

    $a = new aClass();

    $b = new bClass();

    print_r(get_included_files());

?>

  运行结果如下:

 

+ View Code

  

 

 

 

第二种方式:

 

 

    class myLoader{

        public static function autoload($className){

            $filename = './include/'.$className.'.php';

            if(file_exists($filename)){

                include_once $filename;

            }else{

                exit('no file');

            }

        }

    }

 

    define('EOL', (PHP_SAPI == 'cli') ? PHP_EOL : '
');

 

    spl_autoload_register(array('myLoader', 'autoload'));

 

    /**

    *__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法

    * 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list

    */

    //spl_autoload_register( '__autoload' );

 

 

    error_reporting(E_ALL^E_NOTICE^E_WARNING^E_ERROR);

    error_reporting(E_NOTICE E_WARNING );

 

    $a = new aClass();

    print_r(get_included_files());

    echo EOL;

    $b = new bClass();

    echo EOL;

?>

  



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn