php 实现自动加载类文件,PHP __autoload()和spl_autoload_register():自动加载类文件

很多时候写面向对象的应用程序时会对每个类的定义建立一个 PHP 源文件,一个很大的烦恼是不得不在每个脚本开头写一个长长的包含文件列表(每个类一个文件),对于每一个类文件都需要使用 require 或者 include 引入。

PHP 中提供了两个可用来自动加载文件的函数 __autoload() 和 spl_autoload_register() 函数。

__autoload() 方法

当在代码中尝试加载未定义的类时会触发 __autoload() 函数,语法如下:

void __autoload ( string $class )

其中,class 是待加载的类名,该函数没有返回值。

下面演示如何使用 __autoload() 方法。假设有两个文件,分别为 myclass.php 和 yourclass.php。

myclass.php 代码:

<?php class myclass{ function myname(){ echo "My name is PHP
"; } } ?>

yourclass.php 代码:

<?php class yourclass{ function yourname(){ echo "Your name is C语言中文网
"; } } ?>

另外,在同一目录下写一个 autoload.php 文件,其中的代码如下:

<?php function __autoload($name){ if(file_exists($name . ".php")){ require_once $name . '.php'; } else { echo "The path is error"; } } $my = new myclass(); $my->myname(); $your = new yourclass(); $your->yourname(); ?>

执行 autoload.php 文件,输出结果为:

My name is PHP

Your name is C语言中文网

当语句运行到 $my=new myclass() 和 $your=new yourclass() 时便会调用 __autoload() 函数,在 __autoload() 函数里实现了把相应类文件加载进来的功能。

spl_autoload_register() 函数

PHP 还提供了 spl_autoload_register() 函数,可实现自动加载,以及注册给定的函数作为 __autoload() 的实现。

spl_autoload_register() 函数的语法如下:

bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )

autoload_function 是要注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数 spl_autoload()。

throw 参数设置了 autoload_function 无法成功注册时 spl_autoload_register() 是否抛出异常,若 throw 为 true 或未设置值,则抛出异常,为 false 则不抛出。

prepend 如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。

假设当前目录下存在 myclass.php 和 yourclass.php,并且两个文件中的代码和上例相同,此时我们将 autoload.php 中的代码改为如下内容:

<?php function my_autoloader($class) { include $class . '.php'; } spl_autoload_register('my_autoloader'); //自PHP 5.3.0起, 可以使用一个匿名函数 //spl_autoload_register(function ($class) { //include $class . '.php'; // }); $my = new myclass(); $my->myname(); $your = new yourclass(); $your->yourname(); ?>

此时运行 autoload.php,执行结果为:

My name is PHP

Your name is C语言中文网

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值