目的

本文的目的主要是说明 命名空间的 use 关键词 和 new ClassName 这两个步骤,哪个步骤才会执行自动加载,这是逻辑有点混乱的表现,这种想法也是很正常的,让我们来解密吧

命名空间(namespace)

php从5.3加入了命名空间,我略懂一些java,所以命名空间还是比较好理解的,为什么需要命名空间啦?主要解决自己写的内部类/函数/常量  和 第三方的类/函数/常量冲突

。引用命名空间下资源都要 使用关键字 use 标明 例如

require_once("apanly/BrowserDetector/Browser.php");
use apanly\BrowserDetector\Browser;
new Browser();

自动加载

php可以自定义自动加载函数,主要减少include 和 require 的使用。例如

function myLoader($classname){$class_file = $classname . '.php';if ( file_exists($class_file) ){require_once($class_file);}else{echo "[ autoload error ]".$class_file." not found";die(0);}
}
spl_autoload_register("myLoader");

疑问

是 use 的时候 会执行 myLoader 自动记载函数 还是 new 一个对象的时候会执行自动加载函数?

答案是: new 一个对象的时候 会执行自动加载函数

示例演示

use 测试

<?php
//根据class名字 找文件
function myLoader($classname){$class_file = $classname . '.php';if ( file_exists($class_file) ){require_once($class_file);}else{echo "[ autoload error ]".$class_file." not found";die(0);}
}spl_autoload_register("myLoader");use \apanly\test\test;
new test();

没有任何输出

new 测试

<?php
//根据class名字 找文件
function myLoader($classname){$class_file = $classname . '.php';if ( file_exists($class_file) ){require_once($class_file);}else{echo "[ autoload error ]".$class_file." not found";die(0);}
}spl_autoload_register("myLoader");use \apanly\test\test;

输出 :

[ autoload error ]apanly\test\test.php not found

结论

use 只是标明该使用那个命名空间,new 对象才是真真执行自动加载的触发器。命名空间和自动加载没有半毛钱关系

参考资料

  • 【演示代码】

原文地址:【php】命名空间 和 自动加载的关系
标签:use   autoload   namespace

智能推荐

  • 【No.2 Ionic】Android打包
  • 【No.5 Ionic】修改 应用名,icon,启动界面
  • Composer : php依赖管理工具
  • PSR : php编码规范
  • 【ionic】Mac IOS下真机调试

转载于:https://blog.51cto.com/imguowei/1876561

【php】命名空间 和 自动加载的关系相关推荐

  1. php 自动加载函数,PHP自动加载的实例详解

    一个PHP项目,通常只有一个入口文件index.php,我们通常会在这个入口文件中写入自动加载函数,用来require以后会实例化的类文件.如:spl_autoload_register(functi ...

  2. phper必知必会之类库自动加载的七种方式(三)

    ## php自动加载 下面显示例子的文件目录结构图 一.没有使用命名空间的几种实现 test/oneClass.php class oneClass{public function show(){ec ...

  3. 大话PHP设计模式:类自动载入、PSR-0规范、链式操作、11种面向对象设计模式实现和使用、OOP的基本原则和自动加载配置...

    一.类自动载入 SPL函数 (standard php librarys) 类自动载入,尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_registe ...

  4. Zend Framework 自动加载类的实现方法

    Zend Framework中实现自动加载类.网上查了很多,有好几种.本文收集了常用的3种, 第一种如下: 方法很简单,举例说明.比如想要在models目录下的类可以自动加载. 先在index.php ...

  5. TP5.1类的自动加载

    TP5类的自动加载 学会了作用就是:可以在框架中任意地方创建类,并调用 类的自动加载代码原理这里就说不清了,我兴趣的可以看看慕课网singwa老师的课: https://coding.imooc.co ...

  6. php源码自动识别文本中的链接,自动加载识别文件Auto.php

    用于本应用的控制器自动加载类设置,用法如同\CodeIgniter\Config\AutoloadConfig 自动加载识别文件:dayrui/App/应用目录/Config/Auto.php 语法格 ...

  7. php ajax 上拉显示更多,PHP+Ajax点击加载更多内容 -这个效果好,速度快,只能点击更多加载,不能滚动自动加载...

    这个效果好,速度快,只能点击更多加载,不能滚动自动加载 一.HTML部分 ::点击加载更多内容:: 引入jQuery插件和jquery.more.js加载更多插件 jQuery $(function( ...

  8. PHP PSR-4 Autoloader 自动加载(中文版)

    引用:https://segmentfault.com/a/1190000002521658 Autoloader 关键词 "必须"("MUST")." ...

  9. [PHP] 自动加载的实现

    基于psr的规范,使用命名空间和spl_autoload_register()来实现自动加载 文件结构: |--Api |--Account.php |--User.php |--Service |- ...

最新文章

  1. C++ Opencv 读取指定路径中的所有文件(图片)及指定路径中指定格式的所有文件(图片)
  2. python 协程和异步的关系_python协程与异步协程
  3. 说几个著名的死循环:
  4. postgresql中自定义函数脚本的备份及恢复
  5. 集成学习-Boosting集成学习算法GBDT
  6. WebDriver API 元素定位(三)
  7. Python--day47--mysql索引注意事项
  8. Kubernetes之路 3 - 解决服务依赖
  9. Android 沉浸式状态栏
  10. 初探线程之线程竞争及故障
  11. MySQL设置mysqld_MySQL指定mysqld启动时所加载的配置文件
  12. 关于mysql中日期后面多一个 .0
  13. [Linux]在Ubuntu下虚拟机的安装以及在Ubuntu中进行UDP套接口通信
  14. G1 Concurrent Refinement Thread 在干啥?
  15. animation-delay负值妙用,你不来了解一下吗
  16. JAVA删除数组中指定元素
  17. 一起学爬虫(Python) — 10
  18. Emacs Lisp语言
  19. 基于IC617创建保护环GuardRing(一)
  20. sql:当一列为空时取另一列(case when then)

热门文章

  1. CentOS5.6 安装RabbitMQ
  2. Linux复习(六)
  3. 使用System Center Operations Manager监视Exchange 2007客户端连通性(二)
  4. centos 7 mysql图形界面_centos7-vnstat图形界面搭建
  5. mysql修改密码后无法启动_mysql服务无法启动与强制修改密码指南-Go语言中文社区...
  6. 关系型数据库设计规则
  7. Gateway网关-过滤器链执行顺序
  8. 基于SpringJDBC 实现关键功能-QueryRuleSqlBulider
  9. 从Servlet 到ApplicationContext
  10. 引入了一个IO多路复用模型