数字化技能提升教程,数字化时代生存宝典

首页 / 开发 / 后端开发 / PHP教程

PHP类的自动加载

浏览:1,230
PHP教程
PHP教程
类型:后端开发

PHP教程提供了关于PHP语法、变量、函数、流程控制等概念的详细指导,同时介绍了常见的Web开发技术,如数据库操作、表单处理、会话管理等。通过学习PHP教程,您可以掌握如何使用PHP构建动态网页、开发Web应用程序,并了解如何与数据库进行交互、处理用户输入以及实现用户认证和授权等功能。

一、概念

在编写面向对象(OOP) 程序时,很多开发者为每个类新建一个 PHP 文件,但是每个脚本的开头,都需要包含(include)一个长长的列表(每个类都有个文件)。为了解决这个烦恼,spl_autoload_register() 函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载。

通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。像 class 一样的结构都可以以相同方式自动加载。包括类、接口、trait 和枚举等。

二、自动加载类的好处

总结起来,自动加载功能带来了几个好处:

1、使用类之前无需 include 或者 require;

2、使用类的时候才会 require/include 文件,实现了 lazy loading,避免了 require/include 多余文件;

3、无需考虑引入类的实际磁盘地址,实现了逻辑和实体文件的分离。

三、 实现自动加载

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

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

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

四、加载接口ITest

<?php

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

class Foo implements ITest {
}

/*
string(5) "ITest"

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

五、注意

PHP 8.0.0 之前,可以使用 __autoload() 自动加载类和接口,但由于它是 spl_autoload_register() 的一种不太灵活的替代方法,并且 __autoload() 在 PHP 7.2.0 起弃用,所以在 PHP 8.0.0 起移除。

spl_autoload_register() 可以多次调用以便注册多个自动加载器,但从自动加载函数中抛出异常会中断该过程并且禁止继续执行,所以建议不要从自动加载函数中抛出异常。

广告合作

广告合作

QQ群号:4114653

QQ群号:4114653

温馨提示:

  1. 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
  2. 本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。