PHP的自动加载autoload机制很重要,这里做2个小练习
原创文章,转载请注明:http://www.cnblogs.com/phpgcs
文件结构如下,2种方式实现自动加载
1,自定义函数
2,spl_autoload_register()
|
1
2
3
4
5
6
7
8
9
10 |
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 16drwxrwxr-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 |
首先看自定义函数方式:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 |
<?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());?> |
运行结果如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ php func_autoload.php Array( [0] => /var/www/phpgcs/php_autoload/func_autoload.php).:/usr/share/php:/usr/share/pearaClass is loadedbClass is loadedArray( [0] => /var/www/phpgcs/php_autoload/func_autoload.php [1] => /var/www/phpgcs/php_autoload/include/aClass.php [2] => /var/www/phpgcs/php_autoload/include/bClass.php) |
原创文章,转载请注明:http://www.cnblogs.com/phpgcs
第二种方式:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 |
<?php 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 : ‘<br />‘); 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;?> |
运行结果如下:
|
1
2
3
4
5
6
7
8
9 |
liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ php spl_autoload.php aClass is loadedArray( [0] => /var/www/phpgcs/php_autoload/spl_autoload.php [1] => /var/www/phpgcs/php_autoload/include/aClass.php)bClass is loaded |
扩展阅读:
http://www.ruanyifeng.com/blog/2008/07/php_spl_notes.html
原文:http://www.cnblogs.com/phpgcs/p/php_autoload.html