PHP函数spl_autoload_register()用法和__autoload()介绍
__autoload()的用法就不再说了,以前已经在我的web开发笔记中说过。php __autoload函数(自动载入类文件)的使用方法, 原文地址: 。
说一说,spl_autoload_register()的用法吧,很简单,可以这样理解,就是声明一个自定义__autoload(),你可以是a函数,也可以是b函数,想怎么样就怎么样,函数体的写法,当然要和__autoload()一样就ok 了。
当php找不到类文件会调用这个方法,当注册了自己的函数或方法时,php不会调用__autoload()函数,而会调用自定义的函数
spl_autoload_register(‘func_name');
spl_autoload_register(array(‘class_name','method_name'));
详细说明如下:
spl_autoload_register
(php 5>= 5.1.2)
spl_autoload_register — 注册__autoload()函数
说明
bool spl_autoload_register ([ callback $autoload_function ] )
将函数注册到spl __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。
如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为
spl_autoload_register()函数会将zend engine中的__autoload函数取代为spl_autoload()或
spl_autoload_call()。
参数
autoload_function
欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数
spl_autoload()。
返回值
如果成功则返回 true,失败则返回 false。
注:spl是standard php library(标准php库)的缩写。它是php5引入的一个扩展库,其主要功能包括autoload机制的实现及包括各种iterator接口或类。spl autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的。spl有两个不同的函数spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。
代码如下:
test.class.php
<?php class abc{ function __construct() { echo 'www.chhua.com; } } ?>
load.php
<?php class load { static function loadclass($class_name) { $filename = $class_name.".class.php"; if (is_file($filename)) return include_once $filename; } } /** * 设置对象的自动载入 * spl_autoload_register — register given function as __autoload() implementation */ spl_autoload_register(array('load', 'loadclass')); $a = new test();//实现自动加载,很多框架就用这种方法自动加载类 ?>
spl_autoload_register装载函数的正确写法
autoloading\loading
<?php namespace autoloading; class loadind { public static function autoload($classname){ //根据psr-o的第4点 把 \ 转换层(目录风格符) directory_separator , //便于兼容linux文件找。windows 下(/ 和 \)是通用的 //由于namspace 很规格,所以直接很快就能找到 $filename = str_replace('\\', directory_separator, dir . '\\'. $classname) . '.php'; if (is_file($filename)) { require $filename; } else { echo $filename . ' is not exist'; die; } } }
index.php
//定义当前的目录绝对路径 define('dir', dirname(__file__)); //加载这个文件 require dir . '/loading.php'; //采用`命名空间`的方式注册。php 5.3 加入的 //也必须是得是static静态方法调用,然后就像加载namespace的方式调用,注意:不能使用use spl_autoload_register("\\autoloading\\loading::autoload"); // 调用三个namespace类 //定位到lib目录下的name.php lib\name::test(); //定位到app目录下android目录下的name.php app\android\name::test(); //定位到app目录下ios目录下的name.php app\ios\name::test();
推荐阅读
-
PHP匿名函数和use子句用法实例
-
php数组序列化函数(php常用数组函数和用法)
-
PHP 函数call_user_func和call_user_func_array用法详解
-
PHP中ini_set和ini_get函数的用法小结
-
PHP中isset()和unset()函数的用法小结
-
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
-
php数组序列化函数(php常用数组函数和用法)
-
PHP中spl_autoload_register()和__autoload()区别分析
-
php取整函数ceil,floo,round的用法及介绍
-
php5.3 goto函数介绍和示例