博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPL spl_autoload_register与__autoload方法使用示例浅谈
阅读量:5072 次
发布时间:2019-06-12

本文共 1456 字,大约阅读时间需要 4 分钟。

最近在写一个框架,当然过程中借鉴了很多前辈的写框架的经验啦,哈哈。

在谈到框架自动加载类的方面,我大概翻了一下,现在主流的框架系统都使用spl_autoload_register函数,而非__autoload函数。

额。。。为毛不用__autoload呢????

功能强大点吧。。。

示例:

 

function
 my_own_loader(
$classname
)
{
    
$class_file
 
=
 
strtolower
(
$classname
)
.
"
.php
"
;
    
if
 (
file_exists
(
$class_file
)){
        
require_once
(
$class_file
);
    }
}
spl_autoload_register(
"
my_own_loader
"
);
$a
 
=
 
new
 A();
 

 

这里要注意的是:

  
__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法
* 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list

spl_autoload_register( '__autoload' );

此外我们还可以使用我们自定义的加载方法:

第一种函数式:

function
 my_own_loader(
$classname
)
{
    
$class_file
 
=
 
strtolower
(
$classname
)
.
"
.php
"
;
    
if
 (
file_exists
(
$class_file
)){
        
require_once
(
$class_file
);
    }
}
spl_autoload_register(
"
my_own_loader
"
);
$a
 
=
 
new
 A();

 

  
第二种类式:
class
 Loader
{
    
public
 
static
 
function
 my_own_loader(
$classname
)
    {
        
$class_file
 
=
 
strtolower
(
$classname
)
.
"
.php
"
;
        
if
 (
file_exists
(
$class_file
)){
            
require_once
(
$class_file
);
        }
    }
}
//
 通过数组的形式传递类和方法的名称
spl_autoload_register(
array
(
"
my_own_loader
"
,
"
Loader
"
));
$a
 
=
 
new
 A();

spl_autoload_register()函数应该是主流框架使用最多的也是非常核心的函数之一,可实现自动注册函数和类,实现类似__autoload() 函数功能,简化了类的调用与加载,提高了工作的效率。

支持版本:PHP 5 >= 5.1.2

至于效率问题。php手册上有如此之话:

bool spl_autoload_register ([ $autoload_function ] )

将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。貌似他么指向同一个堆栈,效率上都是大哥二哥的问题,哈哈。。

有兴趣的也可以具体去测试,下。。

文章来源:   

 

 

转载于:https://www.cnblogs.com/jincon/archive/2011/06/25/2090433.html

你可能感兴趣的文章
BBED标记坏块以及修复坏块
查看>>
Codeforces 86C Genetic engineering (AC自己主动机+dp)
查看>>
浅谈前端三大框架Angular、react、vue
查看>>
luogu P1725 琪露诺
查看>>
[转]How to translate WORLD coordinates to TERRAIN coordinates in Unity3d
查看>>
HDU 4333 Revolving Digits
查看>>
trie 树 模板
查看>>
洛谷 [P1948] 电话线
查看>>
MM主要的表和主要字段
查看>>
数据验证随想
查看>>
k8s etcd 集群配置安装
查看>>
SQL反模式学习笔记16 使用随机数排序
查看>>
MySQL_第一部基础入门
查看>>
XML 树结构,语法规则,元素,属性,验证及其解析
查看>>
hdu 4850 Wow! Such String!(欧拉回路)
查看>>
rlwrap(在sqlplus下使用上下键)
查看>>
重新初始化VS2010
查看>>
TCP的ACK确认系列 — 延迟确认
查看>>
uboot的FIT功能
查看>>
ZkApi的方法跨域访问ZkResource的静态资源文件出现的问题
查看>>