1. PHP中的命名空间是什么?

  什么是命名空间?“从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。”——命名空间概述

  2. PHP命名空间该如何理解?

  从本质上讲,命名空间就是一个容器,这个容器内我们可以放入类、函数和变量,他们在同一命名空间内可以无条件相互访问。在命名空间之外,就必须引用或者导入其他命名空间,才能调用它们包含的这些项。

  命名空间跟shell中的文件目录的概念是一样一样的。在当前目录下可以直接用文件名访问所有文件,如果需要访问其他目录下的文件,就需要输入相对路径或绝对路径。
引用方式:

namespace foo;

 class Foo {   

         public function foo()   

             {        

                  return \top\namespace\bar\Bar::fuck();    

              }

             }

  导入方式:

namespace foo; 

use top\namespace\bar\Bar; 

 class Foo {

        public function foo() 

            {        return Bar::fuck();  

            }

           }

  导入就相当于将目的类复制一份到当前命名空间中。

  3. PHP命名空间有何实际应用?

  命名空间的存在是为了解决下面两个问题:

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

 4. 一些tips

  1. 同一个空间下的类直接相互直接调用,属于一家。例如 Laravel 中的 PageController 类中可以直接写 Page::all() 这样的代码来调用 Page 这个model,因为他们俩都在顶级命名空间下。

  2. 若一个类存在于非顶级命名空间中,那么它只能在调用同样是当前命名空间下的其他类才不用“引用”或“导入”,它们属于一家。任何子命名空间都是另一个命名空间,另一个容器,没有除了容器之间关系之外的任何特殊关系。

  3. Laravel 采用 classmap 方式进行自动加载(autoload),PHP虽然有了命名空间这个高级特性,但是这只是逻辑关系,require 文件还是要有的。这个类和文件的对应关系就存在 /vendor/composer/autoload_classmap.php ,每次 composer dump-autoload 都会重新编译、生成。

最新文章

  1. java IO流详解
  2. mybatis generator.xml 配置 自动生成model,dao,mapping
  3. 在Windows Server 2008中布置Web站点时遇到的问题及解决办法
  4. 【WP 8.1开发】电子罗盘
  5. 【javascript激增的思考03】MVVM与Knockout
  6. [SDN] What is SDN?
  7. [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter
  8. TSP问题
  9. 批发网加盟页面轮播Jquery jcarousellite插件效果
  10. In p = new Fred(), does the Fred memory “leak” if the Fred constructor throws an exception?
  11. POJ 1043 What's In A Name?(唯一的最大匹配方法)
  12. java堆栈
  13. hdu4374One hundred layer (DP+单调队列)
  14. sicily 1099 Packing Passengers
  15. Phonegap环境配置
  16. Nginx配置文件中文详解
  17. 任务管理器中的PID找不到
  18. 【剑指offer】反转链表
  19. 通过注解实现一个简易的Spring mvc框架
  20. centos7 opencc 安装

热门文章

  1. JS模板Handlebars的使用和有效组织
  2. ASP.NET对HTML元素进行权限控制(一)
  3. 从零开始学ios开发(十一):Tab Bars和Pickers
  4. self,parent,this区别
  5. android实现可拖动按钮
  6. DB天气app冲刺二阶段第五天
  7. Eclipse 项目管理控制软件svn
  8. android开发 PopupWindow 设置充满屏幕
  9. Timer定时器
  10. oracle merge into 语法