PHP5.3.0 正式版发布及特点总结
PHP5.3.0 一段时间测试版本后正式版6月30号正式发布
#v5.3.0
PHP5.3.0一些特点总结了如下:
命名空间
关于命名空间,在PHP-DEV上进行了多次的讨论,最终就如何工作达成了共识。它的最大好处就是缩短了类名的长度。为了确保您的类库可以插入到其他代码中,它一直建议在前缀中添加您的类名,例如:“Zend_DB_Connection”,但这可能会导致名字过长。所以命名空间改变了这种方式。完整的类名为“Zend::DB:Connection”,您只需要用'Connection' 就能引用到Connection类。
例如:
Java代码
1. <?php
2.
3. // The class file
4. namespace Zend::DB;
5.
6. class Connection {
7.
8. function foo() {
9.
10. echo 'bar';
11.
12. }
13.
14. }
15. ?>
<?php // The class file namespace Zend::DB; class Connection { function foo() { echo 'bar'; } } ?> [/pre]
Java代码
1. <?php
2.
3. require 'Zend/DB/Connection.php';
4.
5. use Zend::DB::Connection;
6.
7. $connection = new Connection();
8. $connection->foo();
9.
10. ?>
<?php require 'Zend/DB/Connection.php'; use Zend::DB::Connection; $connection = new Connection(); $connection->foo(); ?>[/pre]
使用命名空间同样可以给类取别名
Java代码
1. <?php
2.
3. use Zend::DB::Connection as MyConnection;
4.
5. $connection = new MyConnection();
6.
7. ?>
<?php use Zend::DB::Connection as MyConnection; $connection = new MyConnection(); ?>[/pre]
此外,常量和函数也可以使用命名空间,但是他们不能够直接的被导入。这就意味着,如果您在'Connection'中创建了一个函数 'myFunction',您不能导入 Zend::DB:myFunction ,但是您可以先导入Zend::DB,然后使用DB:myFunction() 来调用此函数。
查看详情:
Late static bindings
从用户的角度上看没有一个真正的描述性名称,但这个功能在类的继承上添加了一些更具弹性的功能。
例如: Limitations of self::
Java代码
1. <?php
2. class A {
3. public static function who() {
4. echo __CLASS__;
5. }
6. public static function test() {
7. self::who();
8. }
9. }
10.
11. class B extends A {
12. public static function who() {
13. echo __CLASS__;
14. }
15. }
16.
17. B::test();
18. ?>
<?phpclass A { public static function who() { echo __CLASS__; } public static function test() { self::who(); } } class B extends A { public static function who() { echo __CLASS__; } } B::test();?>[/pre]
运行结果:A
查看详情:
__callStatic
使用函数__call,对未定义的方法以不同的方式截获并进行处理。PHP 5.3添加__callstatic,为静态方法也增加了相同的功能。