php类自动载入

php类自动载入

大家好,又见面了,我是全栈君。

在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件。 这会带来一个烦恼:每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件)。

在 PHP 5 中,已经不再需要这样了。 spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载。通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。


尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_register() 函数。spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载(同一个应用中,可以支持任意数量的加载器,比如第三方库中的)。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。

 

Example #1 自动加载示例

本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClass2 类。

<?php
spl_autoload_register(function ($class_name) {
    require_once $class_name . '.php';
});

$obj  = new MyClass1();
$obj2 = new MyClass2();
?>

Example #2 另一个例子

本例尝试加载接口 ITest

<?php

spl_autoload_register(function ($name) {
    var_dump($name);
});

class Foo implements ITest {
}

/*
string(5) "ITest"

Fatal error: Interface 'ITest' not found in ...
*/
?>

Example #3 自动加载在 PHP 5.3.0+ 中的异常处理

本例抛出一个异常并在 try/catch 语句块中演示。

<?php
spl_autoload_register(function ($name) {
    echo "Want to load $name.\n";
    throw new Exception("Unable to load $name.");
});

try {
    $obj = new NonLoadableClass();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}
?>

以上例程会输出:

Want to load NonLoadableClass.
Unable to load NonLoadableClass.

Example #4 自动加载在 PHP 5.3.0+ 中的异常处理 – 没有自定义异常机制

本例将一个异常抛给不存在的自定义异常处理函数。

<?php
spl_autoload_register(function ($name) {
    echo "Want to load $name.\n";
    throw new MissingException("Unable to load $name.");
});

try {
    $obj = new NonLoadableClass();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}
?>

以上例程会输出:

Want to load NonLoadableClass.
Want to load MissingException.

Fatal error: Class 'MissingException' not found in testMissingException.php on line 4

 

 

 

 

 

 

 

http://php.net/manual/zh/language.oop5.autoload.php

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107923.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月12日 上午7:00
下一篇 2022年3月12日 上午7:00


相关推荐

  • ThinkPHP3.2版本安全更新

    ThinkPHP3.2版本安全更新

    2021年10月18日
    51
  • 网站挂马检测_域名拦截检测网站

    网站挂马检测_域名拦截检测网站网站挂马检测工具,网站挂马如何检测,如何检测网站挂马在最近的一次网站优化项目中,我负责的一个网站出现了网站被挂马问题,所以网站的关键词排名很快就从首页消失了。把网站挂马问题解决后,花费了很多的精力才让关键词排名恢复。在seo公司工作期间,经常听到同事说起网站挂马的危害,因为没有切身体会,所以并没有太多感触。突然网站挂马的问题落到了自己负责的项目上,这才意识到网站挂马问题真的很不简单,在平时…

    2026年4月19日
    5
  • CentOS7安装nginx-1.20.1

    CentOS7安装nginx-1.20.11.安装依赖yum-yinstallgccpcrepcre-develzlibzlib-developensslopenssl-develgcclinux编译器pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzipopenssl是web安全通信的基石,也就是https相关的依赖如下图,不存在的依赖会自动安装,已存在的依赖会被

    2022年6月3日
    105
  • 微信平台开发——日历服务

    微信平台开发——日历服务

    2021年9月4日
    54
  • 轨迹跟踪求解Fmincon函数(2)「建议收藏」

    轨迹跟踪求解Fmincon函数(2)「建议收藏」1.Fmincon函数介绍在matlab中,fmincon函数可以求解带约束的非线性多变量函数(Constrainednonlinearmultivariablefunction)的最小值,即可以用来求解非线性规划问题matlab中,非线性规划模型的写法如下2.基本语法[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)x的返回值是决策向量x的取值,fval的返回值是目标函数在x处的f(x)的取值。fun是用.

    2022年5月3日
    34
  • javascript回调函数详解

    javascript回调函数详解scripttype text javascript functionadd a b fun letsum a b fun sum functionlog sum document write 我是方法 1 拿到的数字是 sum 方法 1 add 2 3 log 方法 2 内嵌函数方法 add 2 3 function su scripttype text

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号