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

PHP基础之Autoload

WBOY
풀어 주다: 2016-06-21 08:48:32
원래의
1069명이 탐색했습니다.

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;

?>

  



관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿