浅谈PHP中自动加载类库机制

在php开发过程中,在写面向对象程序时都需要对每个类建立一个PHP源文件,其中一个很大的麻烦就是不得不在每个脚本开头写一个长长的类包含文件(include or require函数)。虽然,对于一个小的php项目来说,没什么大的问题,但是对于大型的PHP开发项目中,这么做会产生大量的require和include方法调用,这样不仅效率低下,而且不易于维护。


在PHP5之后,不需要这样了,我们可以自己定义一个__autoload函数,如果类所在文件没有被包含进来,或者类名出错,Zend引擎会自动调用__autoload函数,但是次函数需要用户自己实现__autoload函数。在PHP5.1.2版本之后,可以使用spl_autoload_register函数自定义加载处理函数(一种更加灵活的方式来实现类的自动加载)。


1、__autoload( )

<?php 
	function __autoload($_className) {
        echo "Aotuload class:" . $_className . '.class.php';
    }

    new Test();
?>

输出: Aotuload class:Test.class.php

在我们利用MVC做项目时,会用到控制器和模型,那么我们是如何自动调用所需要的控制器类和模型类的呢,下面为大家解释下。

笔者这里命名的控制器类名和模型类名分别是:TestAction.class.php和TestModel.class.php,其实除了大多使用的控制器类和模型类之外还有很的类,例如工具类等等,为大家说明下系统是如何调用的。

	function __autoload ($_className) {
		//加载控制器类
		if (substr($_className, -6) == 'Action') {
			require ROOT_PATH . '/action/' . $_className . '.class.php';
		} elseif (substr($_className, -5) == 'Model') {
			//加载模型类
			require ROOT_PATH . '/model/' . $_className . '.class.php';
		} else {
			//加载其他类
			require ROOT_PATH . '/includes/' . $_className . '.class.php';
		}
	}

我们可以看出_autoload至少要做三件事情:

第一件事是根据类名确定类文件名;

第二件事是确定类文件所在的磁盘路径;

第三件事是将类从磁盘文件中加载到系统中。

第三步最简单,只需要使用include/require即可。要实现第一步,第二步的功能,必须在开发时约定类名与磁盘文件的映射方法,只有这样我们才能根据类名找到它对应的磁盘文件。 


相信大家应该懂得为什么控制器和模型类通常会以***Action和***Model开头的命名方式了吧,其中很大一方面原因是为了开发时约定类名和磁盘文件的映射的实现。


当然,除了__autoload()自动加载函数外,PHP提供的spl_autolad_register()函数也是非常的灵活和方便的,可以自行查阅以下,这里不再赘余。


(完)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值