一个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自动加载的实例详解相关推荐

  1. python装饰器函数-Python函数装饰器常见使用方法实例详解

    本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...

  2. php切换当前目录,php 改变当前目录函数chdir()的定义与用法实例详解

    php chdir()函数的定义与用法? 在PHP 中,chdir()函数是改变当前目录,什么意思呢,就是将获取当前的目录,换一个目录,本来你的当前目录是WWW/index目录,当使用了chdir() ...

  3. python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过 ...

  4. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  5. python从date目录导入数据集_PyTorch加载自己的数据集实例详解

    数据预处理在解决深度学习问题的过程中,往往需要花费大量的时间和精力. 数据处理的质量对训练神经网络来说十分重要,良好的数据处理不仅会加速模型训练, 更会提高模型性能.为解决这一问题,PyTorch提供 ...

  6. mysql 配置自动截断_MySql超长自动截断实例详解

    MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的? 如下 CREATE TABLE `p_app ...

  7. mysql 超长 java 问题_MySql超长自动截断实例详解

    MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者更新语句时超长的字无法自动截断,而在navicat中直接执行是可以自动截断的? 如下 CREATE TABLE `p_app ...

  8. WORD中的自动编号实例详解(多图)

    跟"项目符号"一样,自动编号功能也是针对"列表"内容的.并且自动编号中更改列表级别.设置字体等方法与项目符号的相同,参见:WORD中的项目符号实例详解 与&qu ...

  9. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  10. python跨函数调用变量_对python中不同模块(函数、类、变量)的调用详解

    首先,先介绍两种引入模块的方法. 法一:将整个文件引入 import 文件名 文件名.函数名( ) / 文件名.类名 通过这个方法可以运行另外一个文件里的函数 法二:只引入某个文件中一个类/函数/变量 ...

最新文章

  1. ecplise中插件Jrebel的安装
  2. 搞懂单链表常见面试题
  3. cakephp 安装mysql_CakePHP的安装的简单方法
  4. 项目经理在项目各阶段的工作重点
  5. 密钥文件登录服务器,密钥文件登录云服务器
  6. python3多进程写时拷贝_python多进程实现复制文件
  7. Android ContentProvider的介绍(很详细)
  8. 【kafka】kafka 控制台 消费报错 cant rebalance afer 4 retries
  9. [SOJ] 无路可逃?
  10. c#获取本地ip地址网关子网掩码_这样解释IP地址、子网掩码、网关之间的联系,不会技术也能听懂...
  11. scholarscope不显示影响因子_Cancer Cell | 冯嘉怡博士等揭示精氨酸甲基转移酶抑制剂可通过影响RNA剪接发挥抑癌效果...
  12. Eclipse+CDT+MinGW 配置 C/C++ 开发环境
  13. go语言开发环境搭建_GO语言开发环境搭建
  14. 【BZOJ 2306】 2306: [Ctsc2011]幸福路径 (倍增floyd)
  15. 我自己对于Netty的疑问
  16. html在线表格样式模板,纯css实现的table表格样式,教程站常用
  17. Excel怎么制作三斜线表头
  18. android 定制ROM集成 YouTube API,并实现双屏异显(主屏展示列表,副屛播放视频)
  19. 咸鱼CAD笔记—CAD快捷键
  20. AE入门教程及素材资料链接

热门文章

  1. SAP UI5 Focus related
  2. Cloud for Customer里UI5 JavaScript代码和UI designer里模型的对应关系
  3. Equipment upload - ERP inbound的debug
  4. When will the reference ATTRIBUTE_REF of an BOL entity be cleared
  5. ABAP并发编程到底能提高多少性能
  6. Java class loader调试
  7. 一个基于nodejs开发的微服务脚手架应用,架构和CRM WebUI很像
  8. SAP CDS view性能调优的一些准则和例子
  9. linux+ip+路由设置,Linux下IP巧设置-网管专栏,防火墙和路由
  10. python蟒蛇绘制实例分析_011 实例2-Python蟒蛇绘制