PHP 自动加载类原理与用法实例分析


Posted in PHP onApril 14, 2020

本文实例讲述了PHP 自动加载类原理与用法。分享给大家供大家参考,具体如下:

类的自动加载 (Autoloading Classes)

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

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

Tip

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

Note:

在 PHP 5.3 之前,__autoload 函数抛出的异常不能被 catch 语句块捕获并会导致一个致命错误(Fatal Error)。 自 PHP 5.3 起,能够 thrown 自定义的异常(Exception),随后自定义异常类即可使用。 __autoload 函数可以递归的自动加载自定义异常类。

Note:

自动加载不可用于 PHP 的 CLI 交互模式。

Note:

如果类名比如被用于 call_user_func(),则它可能包含一些危险的字符,比如 ../。 建议您在这样的函数中不要使用用户的输入,起码需要在 __autoload() 时验证下输入。

自动加载示例

ClassInterface.php

<?php
interface ClassInterface {
  public function print();
  public function get_current_time();
}

MyClass1.php

<?php
class MyClass1 implements ClassInterface
{
  public $flag = 'MyClass1';

  public function print() {
    echo $this->flag;
  }

  public function get_current_time() {
    echo $this->flag . " : " . date("Y-m-d H:i:s",time());
  }
  
}

MyClass2.php

<?php
class MyClass2 implements ClassInterface
{
  public $flag = 'MyClass2';

  public function print() {
    echo "MyClass2";
  }

  public function get_current_time() {
    echo $this->flag . " : " . date("Y-m-d H:i:s",time());
  }
  
}

autoload.php

<?php
date_default_timezone_set('Asia/Shanghai');
spl_autoload_register(function ($class_name) {
  require_once $class_name . '.php';
});

$obj = new MyClass1();
$obj2 = new MyClass2();
$obj->print();
echo "<br>";
$obj->get_current_time();
echo "<br>";
$obj2->print();
echo "<br>";
$obj2->get_current_time();

 输出结果:

PHP 自动加载类原理与用法实例分析

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
ThinkPHP中实例Model方法的区别说明
Aug 21 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
Mar 11 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
php格式输出文件var_export函数实例
Nov 15 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
PHP实现限制IP访问及提交次数的方法详解
Jul 17 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 #PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 #PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 #PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 #PHP
PHP 对象接口简单实现方法示例
Apr 13 #PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 #PHP
yii2.0框架多模型操作示例【添加/修改/删除】
Apr 13 #PHP
You might like
php 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
PHP网站开发中常用的8个小技巧
2015/02/13 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
javascript中new关键字详解
2015/12/14 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
python中的数据结构比较
2019/05/13 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
django-初始配置(纯手写)详解
2019/07/30 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
2019/08/09 Python
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
售房协议书
2014/08/19 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
Win2008系统搭建DHCP服务器
2022/06/25 Servers