php 5.3带来了什么(一)

之前陆续介绍了php 5.3的一些新特性,正好上周看到ZendCon关于5.3的ppt,介绍的更为详细,那么这里做个归总或者说翻译:)

Namespaces

php 5.3最大的改动,毫无疑问就是Namespaces(此前有一篇相关的PHP Namespaces FAQ)。这给php开发人员带来的好处不少,广为人们所诟病的函数命名问题也得到了解决。

代码更清晰

5.3之前常见的代码,需要自定义前缀区分函数和类名

CODE:
  1. function MY_wrapper ( )  { }
  2. class MY_DB  {  }
  3. define ( 'MY_CONN_STR''' );
  4. MY_wrapper ( );
  5. new MY_DB ( );
  6. MY_CONN_STR;

使用名称空间之后,代码看上去更加clean。

CODE:
  1. namespace MY;
  2. function wrapper ( )  { }
  3. class DB  {  }
  4. const CONN_STR =  '';
  5. use MY AS MY;
  6. wrapper ( );
  7. new DB ( );
  8. CONN_STR;

一个文件中定义了多个namespace

如果一个文件中定义了多个namespace,应该怎样处理?

CODE:
  1. namespace LIB;
  2. class MySQL  { }
  3. class SQLite  { }
  4. $b = new SQLite ( );
  5. namespace LIB_EXTRA;
  6. class MScrypt  { }
  7. $a = new MScrypt ( );
  8. var_dump (
  9.         get_class ($a ),
  10.         get_class ($b )
  11. );

以上代码输出为:

CODE:
  1. string ( 18 ) "LIB_EXTRA::MScrypt"
  2. string ( 11 ) "LIB::SQLite"

php是解释执行的语言,以上结果合情合理。

namespace的优先级

namespace中定义的函数,类和常量优先,其次才是全局的。

CODE:
  1. namespace foo;
  2. function strlen ($foo )  { return htmlentities ($foo )}
  3. echo strlen ( "test" )// test 
  4. echo :: strlen ( "test" )// 4
  5. echo namespace:: strlen ( "test" )// test

namespace和autoload的友情

  • autoload会根据namespace名称以及class名称来解析类文件位置
  • 仅当namespace和全局范围都没找到class定义的情况下,autoload才会被触发
  • 在namespace中定义的__autoload不会被自动调用
CODE:
  1. function __autoload ($var )  { var_dump ($var )}  // LIB::foo
  2. require  "./ns.php"/*
  3.         <?php
  4.                 namespace LIB;
  5.                 new foo();
  6. */

namespace一些辅料

CODE:
  1. namespace really:: long:: pointlessly:: verbose:: ns;  
  2. __NAMESPACE__;  // 新增的魔法常量,表示当前namespace名称
  3. class a { }   
  4. get_class (new a ( ) )// really::long::pointlessly::verbose::ns::a
  5. use really:: long:: pointlessly:: verbose:: ns:: a AS b; // 从名称空间中引用一个类

注:这里的内容节选自pdf Introduction to PHP 5.3 Slides,后文不再复述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值