php 自动加载函数,PHP自动加载的实例详解
一个PHP项目,通常只有一个入口文件index.php,我们通常会在这个入口文件中写入自动加载函数,用来require以后会实例化的类文件。如:spl_autoload_register(function ($className) {
require 'class/' . $className . '.php';
});
通过以上的代码,我们发现:在自动加载时,我们需要指定存放类的文件夹,以便找到相应的类。那么问题产生了。
在引入命名空间之前:
我们的项目目录
index.php
Controller.php
在index.php中我们需要实例化一个controller目录下的Controller类,并且调用这个对象的model()方法,而这个方法则需要实例化一个model目录下的Model类。我们运行一下index.php:
Warning: require(controller/Model.php): failed to open stream: No such file or directory
提示没有这个文件或目录。原因很简单:PHP在new Model()的时候,是自动去controller目录下去require的,所以找不到。
那么,我们的自动加载函数应该怎么写才能解决问题呢?很显然,把'controller/'换成'model/' 或者 不写目录,都不能正常加载。于是,使用命名空间的好处就显现出来了。
引入命名空间之后:
index.php
Controller.php
Model.php
我们按照文件目录的结构来为每个类写入命名空间,当在一个类中需要实例化另外一个类时,IDE会帮我们写入usenamespace; 。这样,我们在写自动加载的时候,就不用考虑将要加载的类在哪一个文件目录下了,只需要这样写:spl_autoload_register(function ($class) {
require $class . '.php';
});
因为我们在index.php中use了所用到的类的命名空间,自动加载函数会到相应的命名空间中去寻找类(上述代码中的$class就相当于是'controller\Controller'),而这些类中又需要实例化其他的类,因为这些类中也声明了use 其他类的命名空间;,所以自动加载函数又会去相应的命名空间中去require其他类。
这样,我们就不会为加载类而发愁了,极大地解放了我们的编程负担。
php 自动加载函数,PHP自动加载的实例详解相关推荐
- python装饰器函数-Python函数装饰器常见使用方法实例详解
本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...
- php切换当前目录,php 改变当前目录函数chdir()的定义与用法实例详解
php chdir()函数的定义与用法? 在PHP 中,chdir()函数是改变当前目录,什么意思呢,就是将获取当前的目录,换一个目录,本来你的当前目录是WWW/index目录,当使用了chdir() ...
- python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过 ...
- java 接口函数_Java函数式接口Supplier接口实例详解
这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...
- python从date目录导入数据集_PyTorch加载自己的数据集实例详解
数据预处理在解决深度学习问题的过程中,往往需要花费大量的时间和精力. 数据处理的质量对训练神经网络来说十分重要,良好的数据处理不仅会加速模型训练, 更会提高模型性能.为解决这一问题,PyTorch提供 ...
- mysql 配置自动截断_MySql超长自动截断实例详解
MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的? 如下 CREATE TABLE `p_app ...
- mysql 超长 java 问题_MySql超长自动截断实例详解
MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的? 如下 CREATE TABLE `p_app ...
- WORD中的自动编号实例详解(多图)
跟"项目符号"一样,自动编号功能也是针对"列表"内容的.并且自动编号中更改列表级别.设置字体等方法与项目符号的相同,参见:WORD中的项目符号实例详解 与&qu ...
- python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...
本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...
- python跨函数调用变量_对python中不同模块(函数、类、变量)的调用详解
首先,先介绍两种引入模块的方法. 法一:将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二:只引入某个文件中一个类/函数/变量 ...
最新文章
- ecplise中插件Jrebel的安装
- 搞懂单链表常见面试题
- cakephp 安装mysql_CakePHP的安装的简单方法
- 项目经理在项目各阶段的工作重点
- 密钥文件登录服务器,密钥文件登录云服务器
- python3多进程写时拷贝_python多进程实现复制文件
- Android ContentProvider的介绍(很详细)
- 【kafka】kafka 控制台 消费报错 cant rebalance afer 4 retries
- [SOJ] 无路可逃?
- c#获取本地ip地址网关子网掩码_这样解释IP地址、子网掩码、网关之间的联系,不会技术也能听懂...
- scholarscope不显示影响因子_Cancer Cell | 冯嘉怡博士等揭示精氨酸甲基转移酶抑制剂可通过影响RNA剪接发挥抑癌效果...
- Eclipse+CDT+MinGW 配置 C/C++ 开发环境
- go语言开发环境搭建_GO语言开发环境搭建
- 【BZOJ 2306】 2306: [Ctsc2011]幸福路径 (倍增floyd)
- 我自己对于Netty的疑问
- html在线表格样式模板,纯css实现的table表格样式,教程站常用
- Excel怎么制作三斜线表头
- android 定制ROM集成 YouTube API,并实现双屏异显(主屏展示列表,副屛播放视频)
- 咸鱼CAD笔记—CAD快捷键
- AE入门教程及素材资料链接
热门文章
- SAP UI5 Focus related
- Cloud for Customer里UI5 JavaScript代码和UI designer里模型的对应关系
- Equipment upload - ERP inbound的debug
- When will the reference ATTRIBUTE_REF of an BOL entity be cleared
- ABAP并发编程到底能提高多少性能
- Java class loader调试
- 一个基于nodejs开发的微服务脚手架应用,架构和CRM WebUI很像
- SAP CDS view性能调优的一些准则和例子
- linux+ip+路由设置,Linux下IP巧设置-网管专栏,防火墙和路由
- python蟒蛇绘制实例分析_011 实例2-Python蟒蛇绘制