PHP类的自动加载机制实现方法分析


Posted in PHP onJanuary 10, 2019

本文实例讲述了PHP类的自动加载机制实现方法。分享给大家供大家参考,具体如下:

Test1.class.php

<?php
class Test1
{
  public static function test() {
    echo "hello,world!\n";
  }
}

Test2.class.php

<?php
class Test2
{
  public static function test() {
    echo "你好,世界!\n";
  }
}

test.php

<?php
Test1::test();

如果直接写,会报错

Fatal error: Class 'Test1' not found in /home/wwwroot/default/codelabs/test.php on line 3

需要引入文件

<?php
require "Test1.class.php";
Test1::test();

这样就可以访问了。

但是,如果类越来越多,引入的代码就越来越多。

这个时候需要使用__autoload方法。

<?php
Test1::test();
function __autoload($class) {
  //require "Test1.class.php";
  //require "Test2.class.php";
  require __DIR__."/".$class.".class.php"; // __DIR__是当前目录的绝对路径
}

当程序发现没有引入类时,会自动调用这个方法,引入类文件。

进一步优化升级,

支持多个自动加载。

<?php
spl_autoload_register('__autoload1');
spl_autoload_register('__autoload2');
Test1::test();
Test2::test();
// 当检测到无类加载时,会自动调用这个方法
function __autoload1($class) {
  //require "Test1.class.php";
  //require "Test2.class.php";
  require __DIR__."/".$class.".class.php"; // __DIR__是当前目录的绝对路径
}
function __autoload2($class) {
  //require "Test1.class.php";
  //require "Test2.class.php";
  require __DIR__."/".$class.".class.php"; // __DIR__是当前目录的绝对路径
}

很好,很强大!

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

PHP 相关文章推荐
模仿OSO的论坛(一)
Oct 09 PHP
PHP n个不重复的随机数生成代码
Jun 23 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
php项目开发中用到的快速排序算法分析
Jun 25 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP验证类的封装与使用方法详解
Jan 10 #PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 #PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 #PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 #PHP
PHP微信支付结果通知与回调策略分析
Jan 10 #PHP
php如何利用pecl安装mongodb扩展详解
Jan 09 #PHP
PHP如何通过表单直接提交大文件详解
Jan 08 #PHP
You might like
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
Node.js实现数据推送
2016/04/14 Javascript
js实现分页功能
2017/05/24 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
python 默认参数相关知识详解
2019/09/18 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
django 外键创建注意事项说明
2020/05/20 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
Python几种常见算法汇总
2020/06/02 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
管理岗位竞聘演讲稿
2014/08/18 职场文书
2014年生产部工作总结
2014/12/17 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
微观世界观后感
2015/06/10 职场文书
三八节活动简报
2015/07/20 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python