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

PHP基础之Autoload

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

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;

?>

  



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:php+ajax实现微信上墙Nächster Artikel:PHP随机生成n位字符串