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

在学习PHP的面向对象的时候,会知道很多“语法糖”,也就是魔术方法。有一个加自动加载的魔术方法,叫:__autoload();

先看一段代码

function __autoload($classname) {

$filename = "./". $classname .".php";

include_once($filename);

}

new a();

这里实例化了一个A类,但在代码块中没有A类的相关代码,按常理是应该会报错,因为没有找到对应的A类,但如果你使用了autoload()自动加载函数的话,结果就可以能不一样

从上面的流程图:在页面实例化一个新类,就会先在当前目录找对应的类代码,如果没有就去autoload堆栈找对应的自动加载函数,如果有的话就自动加载该类,没有话就抛出错误。

这是PHP自动加载的一个机制。然后重点在后面。如果我有多个自动加载的函数,怎么办!

PHP提供了一个SPL函数

spl_autoload_register(); // 注册autoload函数

官方:spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。

然而在PHPexecl 和 PHPWord 里面都使用到了 这个函数来做自动加载,但两者有区别!!

PHPexecl 自动加载的方法(这里作者估计是Python工程师,不然花括号都没有,用缩进来表示)

public static function Register() {

$functions = spl_autoload_functions();

foreach ( $functions as $function)

spl_autoload_unregister($function);

$functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions);

foreach ( $functions as $function)

$x = spl_autoload_register($function);

return $x;

}

PHPWord 自动加载的方法

public static function Register() {

return spl_autoload_register(array('PHPWord_Autoloader', 'Load'));

}

这两种方法,都可以完成重定义自动加载,但有区别? 如果是独立运行代码,两种情况都可以运行,但要是整合到框架中,比如YII框架。那么PHPWord的自动加载就无效了。

因为YII框架自动带有自动加载函数,而且再代码运行的时候就已经注册了,而spl_autoload_register()会将新的自动加载函数,加载autoload队列的后面。所有PHPWord在运行的时候

就调用的是YII框架定义的自动加载机制,而且不是PHPWord这种加载方式。

所以反过来看PHPexecl的加载函数,你就明白了。

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

python类加载机制_PHP面向对象自动加载机制原理与用法分析相关推荐

  1. php自动加载机制简述,PHP自动加载机制实例详解

    本文实例讲述了PHP自动加载机制.,具体如下: 在php中,我们一般使用 require, requre_once, include, include_once 这四个命令来加载其他php文件,这在一 ...

  2. PHP的autoload自动加载机制使用说明

    2019独角兽企业重金招聘Python工程师标准>>> 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文 ...

  3. Atitit. 木马病毒的外部class自动加载机制------加载class的方法总结

    Atitit. 木马病毒的外部class自动加载机制------加载class的方法总结 Atitit.java load class methods 1. 动态加载jar文件和class文件. 1 ...

  4. php自动加载机制的实现

    一.什么是自动加载 自动加载就是当我们在当前文件中实例化一个不存在的类时,调用自动加载机制引入相应的类文件. 注:自动加载有两种方式(都是php内置的),一种是通过__autoload(),另一种是通 ...

  5. thinkphp 框架自动加载原理_thinkPHP5.0框架自动加载机制分析

    本文实例讲述了thinkPHP5.0框架自动加载机制.分享给大家供大家参考,具体如下: 概述 ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类 ...

  6. thinkphp源码分析(三)—自动加载篇(Loader的分析)

    源码分析 自动加载 系统会调用 Loader::register()方法注册自动加载,在这一步完成后,所有符合规范的类库(包括Composer依赖加载的第三方类库)都将自动加载. 系统的自动加载由下面 ...

  7. java 类加载器的理解及加载机制?

    通过 java 命令运行 java 程序的步骤就是指定包含 main 方法的完整类名以及一个 classpath 类路径,类路径可以有多个,对于直接的 class 文件路径就是 class 文件的根目 ...

  8. Linux内核模块自动加载机制 .

    标题http://www.osplay.org/modules/article/view.article.php?7 思考 如果想让内核启动过程中自动加载某个模块该怎么做呢?最容易想到的方法就是到/e ...

  9. yii2 引入php文件,Yii2中YiiBase自动加载类、引用文件方法分析(autoload)

    本文实例分析了Yii2中YiiBase自动加载类.引用文件的方法.分享给大家供大家参考,具体如下: 在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现.但是这个也可以用来引用文件. pub ...

最新文章

  1. 今晚直播 | 基于知识图谱的人机对话系统方法与实践
  2. JustOj 1486: Hello, world!
  3. (二)GitHub的使用随记
  4. C/C++之vector的内存管理和效率
  5. linux7yum安装mysql,CentOS7 使用yum安装mysql
  6. 索尼入局电动汽车市场 宣布成立移动出行公司
  7. nodejs正则练习
  8. oracle 10g rac for linux (ASM) 修改modify public IP and vip
  9. B站又出事了,遭几大平台联合谴责
  10. 在linux不能连上互联网的情况下安装IE6
  11. Chrome离线安装Axure插件
  12. NetApp 数据存储解决方案
  13. 【Unity】制作动画
  14. 拼接字符串Joiner的用法
  15. 搭建以太坊私有链多节点环境
  16. 打开Excel文件需要两次才能打开文件解决办法
  17. 16. 求两点之间的最短路径
  18. 《第31天:JQuery - 轮播图》
  19. 诺基亚智能手机未来仅采用Symbian和MeeGo系统
  20. es6转es5 在线转换工具

热门文章

  1. leetcode 1328. Break a Palindrome | 1328. 破坏回文串(贪心)
  2. 面试必会系列 - 4.1 程序员必须掌握的:计算机组成、操作系统知识点汇总
  3. leetcode 111. 二叉树的最小深度
  4. java安全编码指南之:方法编写指南
  5. 群晖pxe安装windows_通过PXE快速部署VMware ESXi 6.5
  6. vant按需引入没样式_传统背景墙早看腻了,不如走一圈石膏线简单好看,8种样式随意选...
  7. 基本的Socket通信
  8. Codeup-问题 B: 采药
  9. 可迭代协议与for-of循环
  10. Leecode 301. 删除无效的括号——Leecode每日一题系列