近日,PHP官方已将拥有众多新特性的PHP5.3放到A3版本. 在更新日志中强调了这一版本的名字空间部份变化较大.
正好前段时间我开发的工业快捷框架SmartYU用到了5.3 A2中的不少特性,其中就包括了名字空间.所以将两者做了一些比较.
发现不得不对之前的名字空间部份全部推翻重写 :( (看来在发行版本未稳定之前,最好还是不要轻易尝试用其做项目).
首先说定义.
创建一个名字空间,都是通过在文件头部 使用namespace保留关键字定义.
A2版的定义方式是 namespaces SYU::Kernel::Module 的形式
A3版的定义方式是 namespaces SYU\Kernel\Module 的形式
相较而言,A2版的子空间分隔符是 :: 比A3的 \ 多一个字符,另外在使用类静态方法时会跟静态方法的操作符:: 相同,容易引起一些不必要的麻烦.
比如 SYU::DB::Connect( ) 的形式,时常会让人分不清到底该是调用SYU::DB类的Connect( )方法,还是该调用SYU::DB::Connect类的构造函数.
A3使用 \ 符 类似于win下的路径分隔符,好处就是__autoload自动载入的时候 :-) .但不好的地方在于如果名字空间出现在字符串中,须注意转义. 一会儿两根斜线,一会儿用一根斜线.感觉还是有些混乱.
一但定义了名字空间.自定义以下的部份,函数,类,都属于此名字空间
- <?php
- namespacetest;
-
functionstrlen(){return"i'mhere!";};
-
classpdo{};
-
echostrlen();
-
echo\strlen(strlen());
- ?>
定义名字空间时,需要注意的地方是 namespace定义必须在脚本文件的顶部声明(同一脚本文件可以申明多个名字空间,但第一个申明必须在脚本文件的头部,)
例如
唯一能在namespace前的例外是控制结构中的declare和不起任何作用的原子语句
- <?php
-
declare(encoding='GB2312');
- namespacetest;
- ?>
- <?php
- 1;
- namespacetest;
- ?>
其次,A3增加了名字空间内的const ,这在A2版中是没有的.
- <?php
- namespacetest\sayhello;
-
constt='hello';
- ........
- ?>
那么在其它的程序里可以使用 echo \test\sayhello\t 这样的方式来显示 t的值.结果将打印出 hello
这跟类中的const定义是差不多的..
再者,A2版中,同一脚本文件只能定义一次名字空间,而从A3开始,允许在同一个PHP脚本文件内,定义多个名字空间,
定义的方法有好种:
1是简单定义
- <?php
- namespacen1;
-
constn1_const=1;
-
functiontest(){echo"n1";}
- namespacen2;
-
constn2_const=1;
-
functiontest(){echo"n2";}
- \n1\test();
- \n2\test();
- ?>
2是花括号界定
- <?php
-
- namespacen1
- {
-
constn1_const=1;
-
functiontest(){echo"n1";}
- }
- namespacen2
- {
-
constn2_const=1;
-
functiontest(){echo"n2";}
-
Functionstrlen(){}
- }
-
- namespace
- {
- \n1\test();
- \n2\test();
-
- }
- ?>
着重注意的一点时.一但一个脚本文件被定义了名定空间,那么不允许有任何代码是在名字空间之外.
除了在第一部份讲的declare结构,连空格都不允许.
如果用的第一种简单定义法.没有花括号界定.那么最后一个namespace定义将一直延伸到整个脚本文件结束.
但如果用花括号界定名字空间.则千万要注意在PHP结束(而不是整个脚本文件结束)的后面.不能再有其它东西.
比如下例就是错误的演示
- <?php
- namespacetest
- {
-
- }
- ?><spaces>
未完待续........
本文章由syu于csdn首发
QQ:19179816
MSN:peteryu@live.cn
分享到:
相关推荐
最流行的 HTML、CSS 和 JavaScript 框架,用于在 Web 上开发响应式移动优先项目
php 5.3.0 x64 64位 PHP X64 64位
Anaconda3-5.3.0 Windows最新版安装包,下载后可直接运行
bootstrap-5.3.0-alpha1-dist.zip
bootstrap-5.3.0-alpha1-dist.rar
QT5.3.0 登陆Demo
官网最新版Anaconda3-5.3.0-Windows-x86_64安装包,百度云下载
赠送jar包:pagehelper-5.3.0.jar; 赠送原API文档:pagehelper-5.3.0-javadoc.jar; 赠送源代码:pagehelper-5.3.0-sources.jar; 赠送Maven依赖信息文件:pagehelper-5.3.0.pom; 包含翻译后的API文档:pagehelper...
官网最新版Anaconda3-5.3.0-MacOSX-x86_64安装包,百度云下载
php-5.3.0-Win32-VC6-x86.zip
为了方便以后重新搭建php环境,存一份需要的包,如果有朋友需要免豆下载,希望能帮上大家,这个大包里包含如下的几个小包 (注册版本号) php-5.3.0.tar.bz2 php-5.3.0-fpm-0.5.12.diff.gz fontconfig-2.4.2.tar.gz ...
php-5.3.0-Win32-VC9-x86.zip iis 7,fast-cgi,php3.0
本资源为lua5.3.0的开发包,将该开发包导入到VS中,制作成静态库,在其他项目中导入该静态包,调用lua方法
ISP程序 GProbe 5.3.0ISP程序 GProbe 5.3.0ISP程序 GProbe 5.3.0ISP程序 GProbe 5.3.0ISP程序 GProbe 5.3.0ISP程序 GProbe 5.3.0ISP程序 GProbe 5.3.0ISP程序 GProbe 5.3.0ISP程序 GProbe 5.3.0ISP程序 GProbe 5.3.0...
官网最新版Anaconda3-5.3.0-Linux-x86_64安装包,百度云下载
Agent-5.3.0Agent-5.3.0Agent-5.3.0Agent-5.3.0
Anaconda3-5.3.0 + PyTorch 0.4.1 自动化安装脚本,可以自动配置Anaconda和 PyTorch环境 注:执行到安装Anaconda时需要在是否将变量写入系统环境变量选项中选择yes,否则需要自行配置环境变量,导致安装失败不能继续...
php-5.3.0-fpm-0.5.12
Xffect Editor Pro v5.3.0
商业源码-编程源码-PHPDisk网盘系统GBK版 v5.3.0.zip