您的位置: 新闻频道 Java新闻

原创新闻 PHP 5.3的新特点

2008-08-07 by 见习编辑 ╱/罒呍唲
评论(8) 有1452人浏览 php 5.3
PHP 5.3 alpha1 在不久前公布,在这里列举一些新的特点。

命名空间

关于命名空间,在PHP-DEV上进行了多次的讨论,最终就如何工作达成了共识。它的最大好处就是缩短了类名的长度。为了确保您的类库可以插入到其他代码中,它一直建议在前缀中添加您的类名,例如:“Zend_DB_Connection”,但这可能会导致名字过长。所以命名空间改变了这种方式。完整的类名为“Zend::DB:Connection”,您只需要用'Connection' 就能引用到Connection类。
例如:
<?php 

// The class file 
namespace Zend::DB; 

class Connection { 

   function foo() { 
  
      echo 'bar'; 

   } 

}   
?> 

<?php 

require 'Zend/DB/Connection.php'; 

use Zend::DB::Connection; 

$connection = new Connection(); 
$connection->foo(); 

?>


使用命名空间同样可以给类取别名

<?php 

use Zend::DB::Connection as MyConnection; 

$connection = new MyConnection(); 

?>


此外,常量和函数也可以使用命名空间,但是他们不能够直接的被导入。这就意味着,如果您在'Connection'中创建了一个函数'myFunction',您不能导入 Zend::DB:myFunction ,但是您可以先导入Zend::DB,然后使用DB:myFunction() 来调用此函数。

查看详情:http://ca3.php.net/language.namespaces

Late static bindings
从用户的角度上看没有一个真正的描述性名称,但这个功能在类的继承上添加了一些更具弹性的功能。
例如: Limitations of self::

<?php
class 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();
?>


运行结果:A

查看详情: http://ca.php.net/oop5.late-static-bindings

__callStatic
使用函数__call,对未定义的方法以不同的方式截获并进行处理。PHP 5.3添加__callstatic,为静态方法也增加了相同的功能。

<?php 

class MyClass { 

  static function __callStatic($name, $arguments) { 

    echo "Hi! You just called the method '$name', but it doesn't exist. Perhaps you mistyped"; 

  } 

} 

MyClass::unknownMethod('hii!'); 

?>


查看详情:http://cn.php.net/language.oop5.overloading

Closures
它可以让您创建in-line 函数。许多语言已经开始有此功能了,也许您在不知道的情况下也使用过它。
例如:
<?php 

$myFunction = function() { 

  echo "Hello world!"; 

} 

$myFunction(); 

?>

变量类型的Closure是一个Closure类的对象,因此它也可用于类型提示和验证。

<?php 

  function setSomeEvent(Closure $myClosure) { 

  } 

?>


PHP Closures也使用‘use’关键字从命名空间引入变量。

<?php 

  $prefix = 'hello'; 

  $myClosure = function($name) use ($prefix) { 

     echo $prefix, ' ', $name; 

  } 

  $myClosure('your mom'); // Guess the output doesn't actually makes sense, but you get the idea 

?>


查看详情:http://wiki.php.net/rfc/closures

__invoke
PHP 5.3还添加了另一个方法,如果对象是Closures类,您可以对它进行修改。
<?php 

class MyCustomClosure { 

   function __invoke() { 

      echo "I'm not really a closure, but you can treat me as such\n"; 

   } 

} 

$closure = new MyCustomClosure(); 
$closure(); 

?>


Phar

phar是PHP专为Java的jar文件推出的功能。每个Phar文件都是一个压缩的存档,可以包含一个完整的PHP应用程序。因此它允许像PHPMYAdmin一样作为单独的文件被分布和使用。
<?php 

  file_get_contents('phar:/full/path/to/pharfile.phar/mydata'); 
  require 'phar:/full/path/to/pharfile.phar/myscript.php'; 

?>


更多扩展
intl ,一个国际化库(默认情况下不启用)。
fileinfo,已推出一阵子,默认启用。
sqlite3 ,默认启用
MySQLND ,在PHP中替代了MySQL的驱动程序,‘ND’代表‘本地驱动程序(Native Driver)’,这意味着它紧紧的围绕着PHP引擎,并增加了一些性能。

其他语言的改善


<?php  

$myVar = $value1?$value1:$value2; 

?>

简写为:
?php 

$myVar = $value1?:$value2; 

?>


其他重要的补充

1.date_add() , date_sub() , date_diff() 和OOP equivalents。
2.垃圾回收
3.新的SPL类,如SplStackSqlQueue

您将会看到PHP更加灵活,尤其是对语言的改善,例如closures和命名空间,这将使PHP更为流行。

来自:rooftopsolutions

评论 共 8 条 发表评论

achun 2008-08-12 09:03
个人认为php这样的发展路线真的是走错路了.
我认为php的优势在于两点:
1.学习,部署(脚本语言)成本低
2.丰富的库
php如果在此基础上向
1.嵌入式
2.桌面应用
3.改进脚本,重新设计类库,
4.以php分支的方式提供不同的选择
做出努力,效果会更好.
鉴于php目前的发展策略,偶真的不看好他了,要知道新的思想在不断产生呀.
koda 2008-08-08 17:19
引用
php java化,不如降低点身价,直接投入java怀抱好了。

PHP是脚本语言,这是本质区别,在Web开发领域,脚本语言自然有它的优势,身价不比Java低
slaser 2008-08-08 16:35
php java化,不如降低点身价,直接投入java怀抱好了。
rbh 2008-08-08 15:35
官方对PHP和MySQL版本生命周期的说明:
* PHP 3.0 End of Life - past
* PHP 4.0 End of Life - 2008/08/08

* MySQL 3.23 Extended Support Ends - past
* MySQL 4.0 Extended Support Ends - 2008-12-31
* MySQL 4.1 Active Support Ends - past
* MySQL 4.1 Extended Support Ends - 2009-12-31
linginfanta 2008-08-08 14:38
不伦不类
tag13346 2008-08-08 09:13
越来越象java了
fnet 2008-08-08 01:12
命名空间是个好东西..........
helyho 2008-08-08 01:01
PHP貌似越来越强大了...
简单的部署,容易的入门.
至少这2点强过JAVA

发表评论

您还没有登录,请登录后发表评论