声明:JavaEye新闻文章的版权属于JavaEye网站所有,严禁任何网站转载本文,否则必将追究法律责任!
PHP 5.3 alpha1 在不久前公布,在这里列举一些新的特点。
命名空间
关于命名空间,在PHP-DEV上进行了多次的讨论,最终就如何工作达成了共识。它的最大好处就是缩短了类名的长度。为了确保您的类库可以插入到其他代码中,它一直建议在前缀中添加您的类名,例如:“Zend_DB_Connection”,但这可能会导致名字过长。所以命名空间改变了这种方式。完整的类名为“Zend::DB:Connection”,您只需要用'Connection' 就能引用到Connection类。
例如:
使用命名空间同样可以给类取别名
此外,常量和函数也可以使用命名空间,但是他们不能够直接的被导入。这就意味着,如果您在'Connection'中创建了一个函数'myFunction',您不能导入 Zend::DB:myFunction ,但是您可以先导入Zend::DB,然后使用DB:myFunction() 来调用此函数。
查看详情:http://ca3.php.net/language.namespaces
Late static bindings
从用户的角度上看没有一个真正的描述性名称,但这个功能在类的继承上添加了一些更具弹性的功能。
例如: Limitations of self::
运行结果:A
查看详情: http://ca.php.net/oop5.late-static-bindings
__callStatic
使用函数__call,对未定义的方法以不同的方式截获并进行处理。PHP 5.3添加__callstatic,为静态方法也增加了相同的功能。
查看详情:http://cn.php.net/language.oop5.overloading
Closures
它可以让您创建in-line 函数。许多语言已经开始有此功能了,也许您在不知道的情况下也使用过它。
例如:
变量类型的Closure是一个Closure类的对象,因此它也可用于类型提示和验证。
PHP Closures也使用‘use’关键字从命名空间引入变量。
查看详情:http://wiki.php.net/rfc/closures
__invoke
PHP 5.3还添加了另一个方法,如果对象是Closures类,您可以对它进行修改。
Phar
phar是PHP专为Java的jar文件推出的功能。每个Phar文件都是一个压缩的存档,可以包含一个完整的PHP应用程序。因此它允许像PHPMYAdmin一样作为单独的文件被分布和使用。
更多扩展
intl ,一个国际化库(默认情况下不启用)。
fileinfo,已推出一阵子,默认启用。
sqlite3 ,默认启用
MySQLND ,在PHP中替代了MySQL的驱动程序,‘ND’代表‘本地驱动程序(Native Driver)’,这意味着它紧紧的围绕着PHP引擎,并增加了一些性能。
其他语言的改善
简写为:
其他重要的补充
1.date_add() , date_sub() , date_diff() 和OOP equivalents。
2.垃圾回收
3.新的SPL类,如SplStack 和SqlQueue
您将会看到PHP更加灵活,尤其是对语言的改善,例如closures和命名空间,这将使PHP更为流行。
命名空间
关于命名空间,在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类,如SplStack 和SqlQueue
您将会看到PHP更加灵活,尤其是对语言的改善,例如closures和命名空间,这将使PHP更为流行。
来自:rooftopsolutions


评论 共 8 条 发表评论
achun 2008-08-12 09:03
我认为php的优势在于两点:
1.学习,部署(脚本语言)成本低
2.丰富的库
php如果在此基础上向
1.嵌入式
2.桌面应用
3.改进脚本,重新设计类库,
4.以php分支的方式提供不同的选择
做出努力,效果会更好.
鉴于php目前的发展策略,偶真的不看好他了,要知道新的思想在不断产生呀.
koda 2008-08-08 17:19
PHP是脚本语言,这是本质区别,在Web开发领域,脚本语言自然有它的优势,身价不比Java低
slaser 2008-08-08 16:35
rbh 2008-08-08 15:35
* 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
fnet 2008-08-08 01:12
helyho 2008-08-08 01:01
简单的部署,容易的入门.
至少这2点强过JAVA