php魔术方法__autoload()

参考:http://www.php100.com/html/php/lei/2013/0905/5267.html加上一点点自己的理解和疑惑

Class_1.php

<?php
	class Class_1
	{
		
		function __construct()
		{
			echo "Class_1";
		}

		public function test(){
			echo "class1";
		}
	}
?>
Class_2.php

<?php
	class Class_2 extends Class_1
	{
		
		function __construct()
		{
			echo "Class_2";
		}
	}
?>
如果要在main.php文件中使用的Class_1类的话,要先requireClass_1文件和Class_2文件,不然会报错

但是用__autoload方法的话,只需要

main.php

<?php
	function __autoload($name){
		$path='./'.$name.'.php';
		if(file_exists($path)){
			require_once $path;
		}else{
			echo $path.':该文件不存在';
		}
	}
	//$obj_1=new Class_1();
	$obj_2=new Class_2();
	$obj_2->test();
?>
__autoload函数回在实例化对象之前执行,而且这里没有实例化Class_2的时候并没有先实例化Class_1,说明还没有导入Class_1.php文件,但是
不会报错,说明在导入对象的时候回去判断导入当前对象继承的对象的相应php文件,不过要注意的是,这里的Class_1和Class_2是在同一级目录下的,如果不是同一级目录的话,还是会报错

另外一个需要注意的是,类名和类的文件名必须一致,才能更方便的使用魔术函数__autoload;


2014/11/4

在定义了命名空间的文件定义autoload函数

<?php
namespace zj;
use zj_2;
class class_1{
	function __construct(){
		echo "string";
	}
}
function  __autoload ( $class_name ) {
	echo "this is autoload";
	require_once $class_name.'.php';
}
spl_autoload_register('zj\__autoload');
$temp=new zj_2\class_2();
输出:
this is autoloadclass_2


另外一提,class_exists函数也会触发autoload函数

<?php
namespace zj;
use zj_2;
class class_1{
	function __construct(){
		echo "string";
	}
}
function  __autoload ( $class_name ) {
	echo "this is autoload";
	require_once $class_name.'.php';
}
spl_autoload_register('zj\__autoload');
//$temp=new zj_2\class_2();
var_dump(class_exists('zj_2\class_2'));
?>
输出:

this is autoload

boolean true


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值