【php】命名空间 和 自动加载的关系
目的
本文的目的主要是说明 命名空间的 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】命名空间 和 自动加载的关系相关推荐
- php 自动加载函数,PHP自动加载的实例详解
一个PHP项目,通常只有一个入口文件index.php,我们通常会在这个入口文件中写入自动加载函数,用来require以后会实例化的类文件.如:spl_autoload_register(functi ...
- phper必知必会之类库自动加载的七种方式(三)
## php自动加载 下面显示例子的文件目录结构图 一.没有使用命名空间的几种实现 test/oneClass.php class oneClass{public function show(){ec ...
- 大话PHP设计模式:类自动载入、PSR-0规范、链式操作、11种面向对象设计模式实现和使用、OOP的基本原则和自动加载配置...
一.类自动载入 SPL函数 (standard php librarys) 类自动载入,尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_registe ...
- Zend Framework 自动加载类的实现方法
Zend Framework中实现自动加载类.网上查了很多,有好几种.本文收集了常用的3种, 第一种如下: 方法很简单,举例说明.比如想要在models目录下的类可以自动加载. 先在index.php ...
- TP5.1类的自动加载
TP5类的自动加载 学会了作用就是:可以在框架中任意地方创建类,并调用 类的自动加载代码原理这里就说不清了,我兴趣的可以看看慕课网singwa老师的课: https://coding.imooc.co ...
- php源码自动识别文本中的链接,自动加载识别文件Auto.php
用于本应用的控制器自动加载类设置,用法如同\CodeIgniter\Config\AutoloadConfig 自动加载识别文件:dayrui/App/应用目录/Config/Auto.php 语法格 ...
- php ajax 上拉显示更多,PHP+Ajax点击加载更多内容 -这个效果好,速度快,只能点击更多加载,不能滚动自动加载...
这个效果好,速度快,只能点击更多加载,不能滚动自动加载 一.HTML部分 ::点击加载更多内容:: 引入jQuery插件和jquery.more.js加载更多插件 jQuery $(function( ...
- PHP PSR-4 Autoloader 自动加载(中文版)
引用:https://segmentfault.com/a/1190000002521658 Autoloader 关键词 "必须"("MUST")." ...
- [PHP] 自动加载的实现
基于psr的规范,使用命名空间和spl_autoload_register()来实现自动加载 文件结构: |--Api |--Account.php |--User.php |--Service |- ...
最新文章
- C++ Opencv 读取指定路径中的所有文件(图片)及指定路径中指定格式的所有文件(图片)
- python 协程和异步的关系_python协程与异步协程
- 说几个著名的死循环:
- postgresql中自定义函数脚本的备份及恢复
- 集成学习-Boosting集成学习算法GBDT
- WebDriver API 元素定位(三)
- Python--day47--mysql索引注意事项
- Kubernetes之路 3 - 解决服务依赖
- Android 沉浸式状态栏
- 初探线程之线程竞争及故障
- MySQL设置mysqld_MySQL指定mysqld启动时所加载的配置文件
- 关于mysql中日期后面多一个 .0
- [Linux]在Ubuntu下虚拟机的安装以及在Ubuntu中进行UDP套接口通信
- G1 Concurrent Refinement Thread 在干啥?
- animation-delay负值妙用,你不来了解一下吗
- JAVA删除数组中指定元素
- 一起学爬虫(Python) — 10
- Emacs Lisp语言
- 基于IC617创建保护环GuardRing(一)
- sql:当一列为空时取另一列(case when then)
热门文章
- CentOS5.6 安装RabbitMQ
- Linux复习(六)
- 使用System Center Operations Manager监视Exchange 2007客户端连通性(二)
- centos 7 mysql图形界面_centos7-vnstat图形界面搭建
- mysql修改密码后无法启动_mysql服务无法启动与强制修改密码指南-Go语言中文社区...
- 关系型数据库设计规则
- Gateway网关-过滤器链执行顺序
- 基于SpringJDBC 实现关键功能-QueryRuleSqlBulider
- 从Servlet 到ApplicationContext
- 引入了一个IO多路复用模型