男篮世界杯赔率:php中使用__autoload()自动加载未
分类:计算机教程

下面是一段使用__autoload()的代码,供大家学习参考:

SPL有两个不同的函数 spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。

复制代码 代码如下:

spl_autoload 是SPL实现的默认的自动加载函数,它的功能比较简单。它可以接收两个参数,第一个参数是$class_name,表示类名,第二个参 数$file_extensions是可选的,表示类文件的扩展名" title="扩展名">扩展名,可以在$file_extensions中指定多个扩展名" title="扩展名">扩展名,护展名之间用分号隔开即 可;如果不指定的话,它将使用默认的扩展名" title="扩展名">扩展名.inc或.php。spl_autoload首先将$class_name变为小写,然后在所有的 include path中搜索$class_name.inc或$class_name.php文件(如果不指定$file_extensions参数的话),如果找 到,就加载该类文件。你可以手动使用spl_autoload(”Person”, “.class.php”)来加载Person类。实际上,它跟require/include差不多,不同的它可以指定多个扩展名" title="扩展名">扩展名。

<?php
/**
* 自动加载相关类库文件
*/
function __autoload($classname){
if(substr($classname,-6)=="Action"){
include APP_PATH.'controllers/'.$classname.'.class.php';
}elseif(substr($classname, -5)=="Model"){
include APP_PATH.'models/'.$classname.'.class.php';
}elseif($classname=="Smarty"){
include SYSTEM_PATH.'smarty/Smarty.class.php';
}else{
include APP_PATH.'common/'.$classname.'.class.php';
}
}
?>

怎 样让spl_autoload自动起作用呢,也就是将autoload_func指向spl_autoload?答案是使用 spl_autoload_register函数。在PHP脚本中第一次调用spl_autoload_register()时不使用任何参数,就可以将 autoload_func指向spl_autoload。

另一种包含路径的方法:

通过上面的说明我们知道,spl_autoload的功能比较简单,而且它是在SPL扩展中实现的,我们无法扩充它的功能。如果想实现自己的更灵活的自动加载机制怎么办呢?这时,spl_autoload_call函数闪亮登场了。

复制代码 代码如下:

我 们先看一下spl_autoload_call的实现有何奇妙之处。在SPL模块内部,有一个全局变量autoload_functions,它本质上是 一个HashTable,不过我们可以将其简单的看作一个链表,链表中的每一个元素都是一个函数指针,指向一个具有自动加载类功能的函数。 spl_autoload_call本身的实现很简单,只是简单的按顺序执行这个链表中每个函数,在每个函数执行完成后都判断一次需要的类是否已经加载, 如果加载成功就直接返回,不再继续执行链表中的其它函数。如果这个链表中所有的函数都执行完成后类还没有加载,spl_autoload_call就直接 退出,并不向用户报告错误。因此,使用了autoload机制,并不能保证类就一定能正确的自动加载,关键还是要看你的自动加载函数如何实现。

<?php
function __autoload($class_name) {
男篮世界杯赔率,$path = str_replace('_', DIRECTORY_SEPARATOR, $class_name);
require_once $path.'.php';
}
?>

在php5中的标准库方法spl_autoload相当于实现自己的__autoload

说明:将下划线转换为目录分隔符(DIRECTORY_SEPARATOR),这样做即可以有效管理库文件,又解决了跨平台的问题。

复制代码 代码如下:

您可能感兴趣的文章:

<?php
    function __autoload($classname){
        if(is_file($classname.'.php'){
            include $classname.'.php';
        } elseif(is_file($classname.'.inc'){
            include $classname.'.inc';
        }
    }

它会在注册目录下自动寻找与$classname同名的.php/.inc文件。当然,你也可以指定特定类型的文件,方法是注册扩展名

复制代码 代码如下:

<?php
    spl_autoload_extensions('.php,.inc,.some');

这样,它也会搜索.some文件。默认,php是不会启动spl_autoload的,那么怎样才能自动让spl_autoload生效呢呢?方法是

复制代码 代码如下:

本文由美洲杯赔率发布于计算机教程,转载请注明出处:男篮世界杯赔率:php中使用__autoload()自动加载未

上一篇:JavaScript制作简易计算器(不用eval) 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • JavaScript制作简易计算器(不用eval)
    JavaScript制作简易计算器(不用eval)
    本文实例为大家分享了js制作简易计算器的具体代码,供大家参考,具体内容如下 本文实例为大家分享了js简易计算器的具体代码,供大家参考,具体内容
  • 探讨如何在php168_cms中提取验证码
    探讨如何在php168_cms中提取验证码
    复制代码 代码如下: 复制代码 代码如下: ?php function yzImg($nmsg){  if (function_exists('imagecreatetruecolor')){   $imstr[0]["s"]=$nmsg[0];   $imstr[1]["s"]=$nmsg[1];   $imstr[2]["s
  • 浅析SVN常见问题及解决方法
    浅析SVN常见问题及解决方法
    问好(新加入的资源): --这说明该文件是项目中新增文件资源,新增资源可以是文件、图片、代码等。 LINK Address : http://blog.csdn.net/niu_hao/article/details/6774471 米
  • 详解Vue.js入门环境搭建
    详解Vue.js入门环境搭建
    vue这个新的工具,确实能够提高效率,在经历的一段时间的摧残之后,终于能够有一个系统的认识了,下面就今天的收获做一个总结,也是vue入门的精髓:
  • javascript 中的继承实例详解,javascript实例男篮世
    javascript 中的继承实例详解,javascript实例男篮世
    javascript 中的继承实例详解 javascript 中的继承实例详解,javascript实例 javascript 中的继承实例详解 阅读目录 原型链继承 借用构造函数 组合继承 寄生组合式