您的位置:首页 > 编程语言 > PHP开发

PHP5.3, PHP5.4, PHP5.5新特性

2015-06-23 14:35 791 查看
PHP 5.3中的新特性

一.PHP 5.3中的新特性

1. 支持命名空间 (Namespace)

2. 支持延迟静态绑定(Late Static Binding)

3. 支持goto语句

4. 支持闭包、Lambda/Anonymous函数

5. 新增两个魔术方法__callStatic()和__invoke()

6. 新增Nowdoc语法

7. 在类外也可使用const来定义常量

8. 三元运算符增加了一个快捷书写方式:

9. HTTP状态码在200-399范围内均被认为访问成功

10.支持动态调用静态方法

1.支持命名空间 (Namespace)

毫无疑问,命名空间是PHP5.3所带来的最重要的新特性。有了命名空间的概念,在开发大型站点时,就比较容易设计出灵活的结构,同时避免不同包中的类名或变量名产生冲突。
在PHP5.3之前,惯例的划分Package的办法是通过目录名来分隔代码文件,代码中的类名则用下划线_来表示目录。例如
<!--
2
<?php
3
class Zend_Db_Table_Select {}
4
// 表示当前这个类的文件位于Zend/Db/Table/Select目录下
5
?>
6
-->


这样的命名方式被PEAR、Zend Framework及各种PHP项目广泛采用。虽然该方法可以避免不同包或类库中的类名产生冲突,但在书写代码的时候显得较为麻烦和笨拙。

在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符为反斜杆\。

select.php
<!--
2
<?php
3
namespace Zend\Db\Table;
4
class Select {}
5
?>
6
-->
这样即使其它命名空间下存在名为Select的类,程序在调用时也不会产生冲突。代码的可读性也有所增加。

调用方法

call.php

<?php
3
//namespace Zend\Db;
4
include('select.php');
5
$s = new Zend\Db\Table\Select();
6
$s->test();
7
?>
2.支持延迟静态绑定(Late Static Binding)

在PHP5中,我们可以在类中通过self关键字或者__CLASS__来判断或调用当前类。但有一个问题,如果我们是在子类中调用,得到的结果将是父类。因为在继承父类的时候,静态成员就已经被绑定了。 例如:

<?php
03
class A {
04
public static function who() {
05
echo __CLASS__;
06
}
07
public static function test() {
08
self::who();
09
}
10
}
11
class B extends A {
12
public static function who() {
13
echo __CLASS__;
14
}
15
}
16
B::test();
17
?>
以上代码输出的结果是:

A

这和我们的预期不同,我们原来想得到子类的相应结果。

PHP 5.3.0中增加了一个static关键字来引用当前类,即实现了延迟静态绑定:
<?php
03
class A {
04
public static function who() {
05
echo __CLASS__;
06
}
07
public static function test() {
08
static::who(); // 这里实现了延迟的静态绑定
09
}
10
}
11
class B extends A {
12
public static function who() {
13
echo __CLASS__;
14
}
15
}
16

17
B::test();
18
?>
以上代码输出的结果是:

B
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: