Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册

编程浪子的博客

浪迹在上海N年的一名专业搬砖小王子,自称编程浪子,博客地址:www.54php.cn

  • 博客访问: 48019
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1400
  • 用 户 组: 普通用户
  • 注册时间: 2016-01-10 19:58
  • 认证徽章:
文章分类

全部博文(138)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: Web开发

目的

本文的目的主要是说明 命名空间的 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 测试

没有任何输出

new 测试

输出 :

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

结论

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

参考资料

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

智能推荐

阅读(1234) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册