python类加载机制_PHP面向对象自动加载机制原理与用法分析
本文实例讲述了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面向对象自动加载机制原理与用法分析相关推荐
- php自动加载机制简述,PHP自动加载机制实例详解
本文实例讲述了PHP自动加载机制.,具体如下: 在php中,我们一般使用 require, requre_once, include, include_once 这四个命令来加载其他php文件,这在一 ...
- PHP的autoload自动加载机制使用说明
2019独角兽企业重金招聘Python工程师标准>>> 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这个class的文 ...
- Atitit. 木马病毒的外部class自动加载机制------加载class的方法总结
Atitit. 木马病毒的外部class自动加载机制------加载class的方法总结 Atitit.java load class methods 1. 动态加载jar文件和class文件. 1 ...
- php自动加载机制的实现
一.什么是自动加载 自动加载就是当我们在当前文件中实例化一个不存在的类时,调用自动加载机制引入相应的类文件. 注:自动加载有两种方式(都是php内置的),一种是通过__autoload(),另一种是通 ...
- thinkphp 框架自动加载原理_thinkPHP5.0框架自动加载机制分析
本文实例讲述了thinkPHP5.0框架自动加载机制.分享给大家供大家参考,具体如下: 概述 ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类 ...
- thinkphp源码分析(三)—自动加载篇(Loader的分析)
源码分析 自动加载 系统会调用 Loader::register()方法注册自动加载,在这一步完成后,所有符合规范的类库(包括Composer依赖加载的第三方类库)都将自动加载. 系统的自动加载由下面 ...
- java 类加载器的理解及加载机制?
通过 java 命令运行 java 程序的步骤就是指定包含 main 方法的完整类名以及一个 classpath 类路径,类路径可以有多个,对于直接的 class 文件路径就是 class 文件的根目 ...
- Linux内核模块自动加载机制 .
标题http://www.osplay.org/modules/article/view.article.php?7 思考 如果想让内核启动过程中自动加载某个模块该怎么做呢?最容易想到的方法就是到/e ...
- yii2 引入php文件,Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
本文实例分析了Yii2中YiiBase自动加载类.引用文件的方法.分享给大家供大家参考,具体如下: 在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现.但是这个也可以用来引用文件. pub ...
最新文章
- 今晚直播 | 基于知识图谱的人机对话系统方法与实践
- JustOj 1486: Hello, world!
- (二)GitHub的使用随记
- C/C++之vector的内存管理和效率
- linux7yum安装mysql,CentOS7 使用yum安装mysql
- 索尼入局电动汽车市场 宣布成立移动出行公司
- nodejs正则练习
- oracle 10g rac for linux (ASM) 修改modify public IP and vip
- B站又出事了,遭几大平台联合谴责
- 在linux不能连上互联网的情况下安装IE6
- Chrome离线安装Axure插件
- NetApp 数据存储解决方案
- 【Unity】制作动画
- 拼接字符串Joiner的用法
- 搭建以太坊私有链多节点环境
- 打开Excel文件需要两次才能打开文件解决办法
- 16. 求两点之间的最短路径
- 《第31天:JQuery - 轮播图》
- 诺基亚智能手机未来仅采用Symbian和MeeGo系统
- es6转es5 在线转换工具
热门文章
- leetcode 1328. Break a Palindrome | 1328. 破坏回文串(贪心)
- 面试必会系列 - 4.1 程序员必须掌握的:计算机组成、操作系统知识点汇总
- leetcode 111. 二叉树的最小深度
- java安全编码指南之:方法编写指南
- 群晖pxe安装windows_通过PXE快速部署VMware ESXi 6.5
- vant按需引入没样式_传统背景墙早看腻了,不如走一圈石膏线简单好看,8种样式随意选...
- 基本的Socket通信
- Codeup-问题 B: 采药
- 可迭代协议与for-of循环
- Leecode 301. 删除无效的括号——Leecode每日一题系列