文档章节

spl_autoload_register && __autoload

drewin
 drewin
发布于 2014/11/06 20:47
字数 286
阅读 112
收藏 6

一、__autoload  


这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数。看下面例子:  


printit.class.php 

 

<?php 

 

class PRINTIT { 

 

 function doPrint() {

  echo 'hello world';

 }

}

?> 

 

index.php 

 

<?

function __autoload( $class ) {

 $file = $class . '.class.php';  

 if ( is_file($file) ) {  

  require_once($file);  

 }

 

$obj = new PRINTIT();

$obj->doPrint();

?>

  


运行index.php后正常输出hello world。在index.php中,由于没有包含printit.class.php,在实例化printit时,自动调用__autoload函数,参数$class的值即为类名printit,此时printit.class.php就被引进来了。  


在面向对象中这种方法经常使用,可以避免书写过多的引用文件,同时也使整个系统更加灵活。  


二、spl_autoload_register()  


再看spl_autoload_register(),这个函数与__autoload有与曲同工之妙,看个简单的例子:  


  

 

<?

function loadprint( $class ) {

 $file = $class . '.class.php';  

 if (is_file($file)) {  

  require_once($file);  

 } 

 

spl_autoload_register( 'loadprint' ); 

 

$obj = new PRINTIT();

$obj->doPrint();

?>

将__autoload换成loadprint函数。但是loadprint不会像__autoload自动触发,这时spl_autoload_register()就起作用了,它告诉PHP碰到没有定义的类就执行loadprint()。 


spl_autoload_register() 调用静态方法 


  

 

<? 

 

class test {

 public static function loadprint( $class ) {

  $file = $class . '.class.php';  

  if (is_file($file)) {  

   require_once($file);  

  } 

 }

 

spl_autoload_register(  array('test','loadprint')  );

//另一种写法:spl_autoload_register(  "test::loadprint"  ); 

 

$obj = new PRINTIT();

$obj->doPrint();

?>


本文转载自:http://pingzhao1990.blog.163.com/blog/static/11356634220126219184282/

共有 人打赏支持
drewin
粉丝 28
博文 121
码字总数 43979
作品 0
海淀
程序员
私信 提问
PHP中spl_autoload_register函数的用法

PHP中splautoloadregister函数的用法 splautoloadregister (PHP 5 >= 5.1.2) splautoloadregister — 注册autoload()函数 说明 bool splautoloadregister ([ callback $autoload_function ] ......

net ljx
2012/10/25
0
0
PHP中spl_autoload_register函数的用法

splautoloadregister (PHP 5 >= 5.1.2) splautoloadregister — 注册autoload()函数 说明 bool splautoloadregister ([ callback $autoload_function ] ) 将函数注册到SPL autoload函数栈中。......

121137141
2013/04/10
0
0
PHP的autoLoad自动加载机制 的几种方式

说说PHP的autoLoad自动加载机制 php的autoload大致可以使用两种方法:autoload和spl方法。这两种方法又各有不同的几种使用方法 autoload的使用方法1: 最经常使用的就是这种方法,根据类名,...

daniel-john
2015/08/27
0
0
类自定载入

为什么需要类自动加载机制 原因: 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文件包含进来。这个在小规模开发的时候,没什么大问...

金于虎
2016/11/15
1
0
__autoload 和sp_autoload_register

一般框架中是肯定会有自动加载类的的机制的,才能autoload()和spautoloadregister()的区别在哪里呢? 官网解释:splautoloadregister — 注册给定的函数作为 autoload 的实现,其实就是可以有多...

hopevow
2016/10/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的KvStateRegistryGateway

序 本文主要研究一下flink的KvStateRegistryGateway KvStateRegistryGateway flink-1.7.2/flink-runtime/src/main/java/org/apache/flink/runtime/jobmaster/KvStateRegistryGateway.java pu......

go4it
22分钟前
4
0
Java springboot B2B2C o2o多用户商城 springcloud架构 (十四)在springboot中用redis实现消息队列

准备阶段 安装redis,可参考我的另一篇文章。 java 1.8 maven 3.0 idea 环境依赖 创建一个新的springboot工程,在其pom文件,加入spring-boot-starter-data-redis依赖: <dependency> ...

itcloud
29分钟前
1
0
云计算的2018年都有什么变化?

2018 年,区块链(Blockchain)在技术圈的风头一时无两,连此前大红大紫的人工智能(AI)都稍逊风骚,云计算圈则奋十年之余烈,完善产品,深耕行业,让越来越多的行业客户接受和实施云计算。回顾...

linuxCool
29分钟前
4
0
[activiti6]调用WebService几个坑

[activiti6]几个报错解决 运行test webservice org.activiti.engine.ActivitiException: no default process engine availableat org.activiti.engine.impl.test.PluggableActivitiTestCas......

Danni3
34分钟前
1
0
一张图看懂SQL的各种Join用法

下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。 具体分解如下: 1、INNER JOIN(内连接)   SELECT FROM Table_A AINNER JOIN Table_B BON A.Key = B.Key 2、L......

dragon_tech
57分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部