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

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值