本文实例讲述了PHP进阶学习之命名空间基本用法。分享给大家供大家参考,具体如下:前言
在PHP中也存在命名空间的用法,由它控制可见范围的这个标识符一般指的就是类和函数。一、PHP命名空间基础需要引入一些第三方的类库,常常类名就会在项目中产生重复冲突,所以,命名空间就是解决这个冲突的一种方法。同个命名空间下的类名不能重复,不同命名空间下可以存在同名的类。1、用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2、为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。二、PHP命名空间的用法
namespace example
或者可以定义多级命名空间:
namespace example\test\demo
example\test\demo命名空间。魔法变量来获取当前命名空间。
use example;
use example\test\demo;
$class = new example\a();//实例化example命名空间下的a类
$class = new example\test\demo\b(); //实例化example\test\demo命名空间下的b类
use example;
use example\test\demo;
$class = new a();//实例化example命名空间下的a类
$class = new b(); //实例化example\test\demo命名空间下的b类
则在实例化b类时要带上相对命名空间路径(注意不是实际文件路径),即new demo\b();这样就采用了绝对路径形式实例化了b类。
namespace example\test\demo as testDemo;
三、基于PSR4的命名空间规范
牋 2. 完整的类名 可以 有一个或多个子命名空间;
牋 3. 完整的类名 必须 有一个最终的类名;
牋 4. 完整的类名中任意一部分中的下滑线都是没有特殊含义的;
牋 5. 完整的类名 可以 由任意大小写字母组成;
牋 6. 所有类名都 必须 是大小写敏感的。牋 (1). 完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为「命名空间前缀」,其必须与至少一个「文件基目录」相对应;
牋 (2). 紧接命名空间前缀后的子命名空间 必须 与相应的「文件基目录」相匹配,其中的命名空间分隔符将作为目录分隔符。
牋 (3). 末尾的类名 必须 与对应的以 .php 为后缀的文件同名。
牋 (4). 自动加载器(autoloader)的实现 一定不可 抛出异常、一定不可 触发任一级别的错误信息以及 不应该 有返回值。
四、注意点
2、虽然PSR4规定了命名空间路径与文件路径需要相对应,但是运行php时命名空间路径与文件路径是没有任何关系的,例如a/b/c下的文件类d,命名空间可以写成a1/b1/c1/d;只不过现在的许多开源框架在实现类自动加载的时候把两者规范为一致,否则会出现类文件加载到了,但是命名空间却加载不到的情况。
3、在命名空间内部,所有的没有根据导入规则转换的限定名称均会在其前面加上当前的命名空间名称。例如,在命名空间A\B内部调用C\D\e(),则C\D\e()会被转换为A\B\C\D\e()。
4、在命名空间内部(例如A\B),对非限定名称的函数调用是在运行时解析的。例如对函数foo()的调用是这样解析的:
(1)在当前命名空间中查找名为A\B\foo()的函数
(2)尝试查找并调用全局(global)空间中的函数foo()。
5、在命名空间(例如A\B)内部对非限定名称或限定名称类(非完全限定名称)的调用是在运行时解析的。下面是调用new C()及new D\E()的解析过程:new C()的解析:
(1)在当前命名空间中查找A\B\C类。
(2)尝试自动装载类A\B\C。http://www.php-fig.org/psr/psr-4/php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。