【小白笔记】PHP学习之路 (22) --对象 __autoload spl_autoload_register 自动载入

__autoload()     当调用了某个函数或实例化类,而在本文件中找不到时执行。

                             通过有规律的名字可以使用__autoload()函数自动载入需要的文件。


例如在action文件夹下有三个文件:

arcAction.php    channelAction.php    modelAction.php

这三个文件中包含了一个各自对应的类,类名与文件名相同。(只要有一定规律,可以通过字符串拼接得到即可)

在与action文件夹同级的目录common文件夹下有一个Action.php文件,

现在想在Action.php文件中访问action下三个文件中的类,直接的做法是将三个文件都

include一次。但是如果这三个文件之间也要进行类的访问的话,又得彼此include,

一旦目录名更改,修改起来非常麻烦。此时如果使用__autoload()函数就十分方便:

在action所在的文件夹下新建一个index.php文件,用于目录管理:

index.php

<?php
	function __autoload($classname){
		include './action/'.$classname.'.php';
	}

	$a = isset($_GET['a'])?$_GET['a'].'Action':'index';

	$action = new $a();
?>

这样,如果通过GET方法获得字符串arc,那么$a的值就是arcAction,

而在index.php中找不到arcAction这个类,这时就会自动执行__autoload()函数,

$a作为参数$classname被传递到__autoload函数内,拼接后的字符串是这样:

'./action/arcAction.php'

这时使用include函数,就会在action文件夹下找到arcAction.php文件,引入。

而arcAction.php中存在名为arcAction的类,引入后在index.php中自然就可以访问

arcAction.php中的类了。这时的index.php就起着类似目录管理的作用。

只要是通过index.php文件访问action目录下的文件,index.php都会将其自动载入。

当其他文件想要访问action目录中的文件时,只要把index.php引入即可。


spl_autoload_register()    功能与__autoload一样,只不过可以自定义函数名称。

当使用spl_autoload_register定义了执行函数之后,当找不到某个函数或类的时候,

将会执行自定义函数,而不是__autoload()。

例如:

	spl_autoload_register('load_auto');
	spl_autoload_register(array('load','loadauto'));

上面一行指定以自定义的load_auto函数代替__autoload函数,下面一行则是指定类load的方法loadauto

来执行。注意此时类的方法loadauto要定义成静态的(public static)。

可以在类中定义自动载入函数:

	class x{
		function __construct(){
			$this->config();
		}
		public static function load($filepath){
			include "{filepath}";
		}
		public function config(){
			spl_autoload_register(array(__CLASS__,'load'));
		}
	}	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值