spl_autoload_register() 函数实现的自动加载
和Python用module来区分代码块不同,PHP按照命名空间来区分,开始学PHP的时候一心认定了如果想用 use 关键字来导入(Python的习惯说法)一个类或者函数或者其他对象的话,必须先include该对象所在的文件,或者require该文件.相当于是把该文件代码加载到内存代码块中,从而能够搜索代码块并使用.
但是看了thinkPHP框架和guthub上一些项目后发现他们的代码挺潇洒的,居然不用include/require.这让我对自己的认识产生了质疑...
少废话了,自动加载使用的是PHP的
spl_autoload_register
函数,该函数的作用是用于注册一些搜索规则*
当代码需要引用某些变量,类等的时候,如果当前内存代码块中没有,那么就会从这些注册的规则中取挨个的套用匹配,直到找不到,然后报错.
函数使用方式:
spl_autoload_register(function, throw, prepend) // throw 全都找不到是否抛错 prepend 是否将规则加在队列最前面(如果你的规则十分个性独特,就可以放在最前面)
也可以用匿名函数的方式:
<?php
namespace spa;
spl_autoload_register(function ($class) {
echo "wanted " . $class . "\n";
if ($class == "spa\Space") {
$class = "Space.php";
} elseif ($class == "spa\Ele") {
$class = __DIR__."/../learn_php/Ele.php";
}
include_once $class;
});
通过测试发现,每次需要执行本文件本命名空间不存在的代码块的时候,都会执行一遍如上注册的函数,然后echo出的信息,当然项目框架最好是按照严格的命名规范来,这样也容易写出匹配规则,然后把该函数在项目的必经之路上执行一遍,就可以和那些潇洒的代码一样,直接 use ,不用include/require 文件了.
*注意:
注册规则的代码一定要最先执行,或者至少要在你本应当执行include/require之前被执行.
spl_autoload_register() 函数实现的自动加载的更多相关文章
- PHP自动加载上——spl_autoload_register
spl_autoload_register函数是实现自动加载未定义类功能的的重要方法,所谓的自动加载意思就是 我们的new 一个类的时候必须先include或者require的类文件,如果没有incl ...
- php自动加载类文件探讨,spl_autoload_register自动加载原理
spl_autoload_register函数是实现自动加载未定义类功能的的重要方法,所谓的自动加载意思就是 我们的new 一个类的时候必须先include或者require的类文件,如果没有incl ...
- PHP自动加载(__autoload和spl_autoload_register)
一:什么是自动加载 我们在new出一个class的时候,不需要手动去require或include来导入这个class文件,而是程序自动帮你导入这个文件不需要手动的require那么多class文件了 ...
- Yii2的深入学习--自动加载机制
Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个 ...
- Yii2的深入学习--自动加载机制(转)
Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个 ...
- 说说PHP的autoLoad自动加载机制
__autoload的使用方法1: 最经常使用的就是这种方法,根据类名,找出类文件,然后require_one 复制代码 代码如下:function __autoload($class_name) { ...
- PHP命名空间与自动加载类详解
本文实例讲述了PHP命名空间与自动加载类.分享给大家供大家参考,具体如下: 今天我要给大家介绍的是PHP的命名空间 和 自动加载类 我先简单的分开演示 在放在一起 大家请看:什么是自动加载类? 想必大 ...
- PHP中的自动加载
自动加载? 或许你已经对自动加载有所了解.简单描述一下:自动加载就是我们在new一个class的时候,不需要手动去写require来导入这个class.php文件,程序自动帮我们加载导入进来.这是 ...
- PHP 命名空间与自动加载机制
include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 include 和 require 没哟什么不妥,但在大型项目中会造成大量的 include 和 requ ...
随机推荐
- 北风设计模式课程---最少知识原则(Least Knowledge Principle)
北风设计模式课程---最少知识原则(Least Knowledge Principle) 一.总结 一句话总结: 最少知识原则(Least Knowledge Principle),或者称迪米特法则( ...
- ImageView的src与background及ScaleType
1 概述 开发中经常使用Imageview的src和background属性,从字面上看src是路径,background是背景.二者都可以显示drawable或者颜色.设置drawable图片资源时 ...
- fedora23解决gedit和vim中文乱码的问题
fedora23解决gedit和vim中文乱码的问题 a, an, the这些不定/定 冠词并不是在所有的名词 前面都要加. 只有在语义上需要时,才加. 名词的单数/复数 前面不加 冠词的 例子多的是 ...
- 【tensorflow使用笔记一】:安装linux下tensorflow环境的问题
首先安装Python Python2.7 使用pip安装Python-numpy发现有老版本影响import直接手动删除: 安装default-jdk顺利: 安装matplotlib发现没有tkint ...
- javascript处理json字符串
字符串转JSON格式 var obj = JSON.parse(json字符串); 判断字段值是否存在,返回true或false obj.hasOwnProperty("error" ...
- Java-小技巧-006 List 排序 Collections.sort()
一.数组操作类:Arrays 最早开始使用,查看方法二分查找:public static int binarySearch(数据类型[] a, 数据类型 key) 前提是有序的 equals 先排序 ...
- 我的常用的Linux命令
环境:centos7 主要应用Linux命令是为了搭建环境,所以记录一下我的常用的Liunx命令 一.常用目录.文件操作命令 1.显示目录列表命令 ls 显示当前目录下的可见文件 ls - ...
- python 正则表达式 re.findall &re.finditer
语法: findall 搜索string,以列表形式返回全部能匹配的子串 re.findall(pattern, string[, flags]) finditer 搜索string,返回一个顺序访问 ...
- arduino库函数1
https://wenku.baidu.com/view/e657b1f0bcd126fff6050baf.html 的阅读笔记.现在到了 第四十页. setup应该是 在开始 执行一次. 然后 lo ...
- 浅谈vue对seo的影响
不可否定的是,vue现在火.但是在实际项目中,特别是像一下交互网站,我们不可避免会考虑到的是seo问题,这直接关系到我们网站的排名,很多人说用vue搭建的网站不能做优化,那我们真的要放弃vue,放弃前 ...