`
tiandirensoon
  • 浏览: 591813 次
文章分类
社区版块
存档分类
最新评论

PHP自动加载类—__autoload()和spl_autoload_register()

 
阅读更多

test.php

当前目录下有j.php


正常输出:成功加载

修改test.php代码


运行test.php报错:

Warning: require_once(k.php) [function.require-once]: failed to open stream: No such file or directory in F:\website\test.php on line 11

Fatal error
: require_once() [function.require]: Failed opening required 'k.php' (include_path='.;C:\php5\pear') in F:\website\test.php on line 11

恢复test.php代码

但是将j.php移到另外目录录入k下,

运行test.php报错:

Warning: require_once(j.php) [function.require-once]: failed to open stream: No such file or directory in F:\website\test.php on line 11

Fatal error
: require_once() [function.require]: Failed opening required 'j.php' (include_path='.;C:\php5\pear') in F:\website\test.php on line 11

这个时候是因为找不到j.php

所以需要修改test.php代码

-----------------------------------------------------------------------------

为什么使用自动加载?

包含一般文件较少的情况会用手动包含要使用的类文件
当要包含大量类文件的时候,这样就会显得麻烦,就可以使用自动包含类。

类文件:test.php

class Test
{
public function __construct()
{
echo __CLASS__.__FUNCTION__;
}
}



1.手动包含:

require_once('test.php');
$test = new Test();


2.使用__autoload()自动包含:

// 这样实例化一个类的时候,将会自动包含同名的类文件
// 需要重载__autoload方法,自定义包含类文件的路径
function __autoload($classname)
{
$class_file = strtolower($classname).".php";
if (file_exists($class_file)){
require_once($class_file);
}
}
$test = new Test();

3.使用spl_autoload_register() 自定义的方法来加载文件
语法:bool spl_autoload_register ( [callback $autoload_function] )

function myLoader($classname)
{
$class_file = strtolower($classname).".php";
if (file_exists($class_file)){
require_once($class_file);
}
}
// 注册自定义方法
spl_autoload_register("myLoader");

$test = new Test();


也可以使用类的方法来实现自定义的加载函数

class autoLoader
{
public static function myLoader($classname)
{
$class_file = strtolower($classname).".php";
if (file_exists($class_file)){
require_once($class_file);
}
}
}

// 通过数组的形式传递类和方法,元素一为类名称、元素二为方法名称
// 方法为静态方法
spl_autoload_register(array("autoLoader","myLoader"));

$test = new Test();

分享到:
评论

相关推荐

    PHP中spl_autoload_register()和__autoload()区别分析

    主要介绍了spl_autoload_register()和__autoload()区别,需要的朋友可以参考下

    spl_autoload_register与autoload的区别详解

    spl_autoload_register(PHP 5 >= 5.1.2)spl_autoload_register — 注册__autoload()函数说明bool spl_autoload_register ([ callback $autoload_function ] )将函数注册到SPL __autoload函数栈中。如果该栈中的函数...

    PHP中spl_autoload_register函数的用法总结

    说明bool spl_autoload_register ([ callback $autoload_function ] )将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。如果在你的程序中已经实现了__autoload函数,它必须显式注册到__...

    PHP spl_autoload_register实现自动加载研究

    函数原型 bool spl_autoload_register ([ callback $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) 版本兼容 PHP 5 >= 5.1.2 实验过程 第一步,使用spl_autoload_register()函数注册...

    PHP函数spl_autoload_register()用法和__autoload()介绍

    又是框架冲突导致__autoload()失效,用spl_autoload_register()重构一下,问题解决

    PHP中spl_autoload_register()函数用法实例详解

    本文实例分析了PHP中spl_autoload_register()函数用法。分享给大家供大家参考,具体如下: 在了解这个函数之前先来看另一个函数:__autoload。 一、__autoload 这是一个自动加载函数,在PHP5中,当我们实例化一个...

    PHP中spl_autoload_register()函数用法实例详解_.docx

    PHP中spl_autoload_register()函数用法实例详解_.docx

    php项目中类的自动加载实例讲解

    主要函数:spl_autoload_...因为spl_autoload_register()函数会将Zend Engine中的__autoload()函数取代为spl_autoload()或spl_autoload_call()。 如果需要多条 autoload 函数,spl_autoload_register() 满足了此类

    php注册与自动加载类

    需要的朋友参考下,步骤1中的类的路径都是相对于init.php而言的,不是相对于Utils而言的,这是因为我们通过init.php里的自动加载函数spl_autoload_register来require类的。

    php注册与自动加载类.zip

    需要的朋友参考下,步骤1中的类的路径都是相对于init.php而言的,不是相对于Utils而言的,这是因为我们通过init.php里的自动加载函数spl_autoload_register来require类的。

    PHP中__autoload和Smarty冲突的简单解决方法

    主要介绍了PHP中__autoload和Smarty冲突的简单解决方法,通过spl_autoload_register注册__autoload函数的方法来解决__autoload函数再在Smarty无效的问题,需要的朋友可以参考下

    php自动加载autoload机制示例分享

    2,spl_autoload_register() 复制代码 代码如下:liuyuan@ebuinfo:/var/www/phpgcs/php_autoload$ ll ./*-rw-rw-r– 1 liuyuan liuyuan 800 Feb 19 11:39 ./func_autoload.php-rw-rw-r– 1 liuyuan liuyuan 906 Feb...

    PHP SPL标准库中的常用函数介绍

    PHP SPL标准库中提供了一些函数用来处理如自动加载、迭代器处理等。 spl_autoload_extensions()添加spl_autoload()可加载的文件扩展名 spl_autoload_register()注册函数到SPL __autoload函数栈中。 复制代码 代码...

    php自动载入类用法实例分析

    本文实例讲述了php自动载入类用法。分享给大家供大家参考,具体如下: ...//也可以使用__autoload()来实现,但是php新版本建议使用spl_autoload_register,因为__autoload()会被逐渐废弃掉 $obj = new M

Global site tag (gtag.js) - Google Analytics