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 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 |
首先看自定义函数方式:
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/pear aClass is loaded bClass is loaded Array ( [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 loaded Array ( [0] => /var/www/phpgcs/php_autoload/spl_autoload.php
[1] => /var/www/phpgcs/php_autoload/include/aClass.php
) bClass is loaded |
扩展阅读: