PHP spl_autoload_register实现自动加载研究_php技巧

这里通过一个实验谈谈这个函数的部分特征。

函数原型
bool spl_autoload_register ([ callback $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )

版本兼容
PHP 5 >= 5.1.2

实验过程
第一步,使用spl_autoload_register()函数注册load()方法

复制代码 代码如下:

<?php
function load(){
require_once 'lib.php';
}
spl_autoload_register('load');
?>

其中lib.php文件代码如下

复制代码 代码如下:

<?php
class className{
function method(){
echo 'a method in class';
}
}

function onlyMethod(){
echo 'method only';
}
?>

说明:lib.php文件为一个className类和一个onlyMethod函数

第二步,调用自动加载类

复制代码 代码如下:

$class = new className();
$class->method();
onlyMethod();

输出:
a method in class
method only

说明:实例化className类,并调用类method()函数,同时调用onlyMethod()方法,输出正常,没有出现错误

第三步,直接调用函数

onlyMethod();

说明:没有实例化类,直接调用lib.php文件中的onlyMethod()函数
输出:
Fatal error: Call to undefined function onlyMethod() in '...(省略路径)'

第四步,实例化className类,再直接调用

$class = new className();
onlyMethod();

输出:method only

从上面的四步实验发现,如果加载的文件包含函数,使用则一定需要实例化里面的类,否则就产生异常情况 Call to undefined function错误,具体在使用中要注意一下。

参与资料:spl_autoload_register

时间: 2024-09-25 00:48:51

PHP spl_autoload_register实现自动加载研究_php技巧的相关文章

解析zend Framework如何自动加载类_php技巧

1.模块中类的自动载入 复制代码 代码如下: $loader = new Zend_Application_Module_Autoloader(array(   //模块内容自动加载类    'namespace' => 'Blog',//命名空间定义 即方法的开头为Blog_    'basePath'  => APPLICATION_PATH . '/modules/blog',//模块位置)); 2. 自动载入 复制代码 代码如下: require_once 'Zend/Loader/A

php基础知识:类与对象(2) 自动加载对象_php技巧

自动加载对象:    很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表.     在 PHP 5 中,不再需要这样了.可以定义一个 __autoload 函数,它会在试图使用尚未被定义的类时自动调用.通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类.  本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClas

如何在smarty中增加类似foreach的功能自动加载数据_php技巧

在smarty中使用自定义插件来加载数据(见:编写Smarty插件在模板中直接加载数据的详细介绍),在使用的时候还是感觉不够方便,灵机一动就想写成类似foreach那种标签: 第一步:在Smarty_Compiler.class.php的_compile_tag函数中增加: 复制代码 代码如下: //加载数据的开始标签case 'load': $this->_push_tag('load'); return $this->_complie_load_start($tag_args); brea

PHP命名空间和自动加载类_php实例

PHP的命名空间(namespace)是php5.3之后才有的.这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的. 为什么php中要使用namespace? 假设如果不使用namespace,那么每个类在一个项目中的名字就必须是固定的.因为php在new的时候不管是调用autoload还是调用已加载过的类,都存在一个类名对应的文件.所以在没有namespace的时候,我们会想各种命名规则来区分不同的类,比如project1_school1_class1_Stu

php面向对象全攻略 (十七) 自动加载类_php基础

自动加载类 很多开发者写面向对象的应用程序时,对每个类的定义建立一个PHP 源文件.一个很大 的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在一个PHP 文件中,当在一个PHP 文件 中需要调用另一个文件中声明的类时,就需要通过include 把这个文件引入.不过有的时候, 在文件众多的项目中,要一一将所需类的文件都include 进来,是一个很让人头疼的事,所以 我们能不能在用到什么类的时候,再把这个类所在的PHP 文件导入

基于javascript实现浏览器滚动条快到底部时自动加载数据_javascript技巧

废话不多说了,直接给大家贴js代码了. <!DOCTYPE html> <html> <head> <script src="jquery-...js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function () { var range = ; /

async和DOM Script文件加载比较_php技巧

目前我用demo.js作为执行文件操作.代码: var now = function() { return +(new Date()); } var t_s = now(); while(now() - t_s < 2000) { } 用sleep.php作为请求文件操作.代码: <?php sleep(3); echo 'var bb'; ?> 1. 一般script标签加载 <script src="demo.js"></script> &

php自动加载方式集合_php技巧

php加载文件方式: 1.include,include_once,requice,requice_one常规加载 2.__autoload() 3.spl_autoload_register() 常规加载方式 假设我们有一个类文件A.php,里面定义了一个名字为A的类: <?php class A { public function __construct() { echo 'Got it.'; } } 然后我们有一个index.php需要用到这个类A,常规的写法就是 <?php requi

PHP autoload与spl_autoload自动加载机制的深入理解_php实例

PHP autoload机制详解(1) autoload机制概述在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利.这 也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例 子: 复制代码 代码如下: /* Person.class.php */<?phpclass Person {var $name, $age;f