[转]PHP5.3新功能与不兼容特性整理

1.支持命名空间

      PHP5.3之后的版本引入了名称空间的支持,此举的好处是不同模块之间分隔方式变得天然纯正,以往PHP要实现不同模块之间的划分通常会各为其政,有 类PEAR或ZendFramework的, 有像Drupal以模块区分等等,在已有项目内引入了第三方库经常会担心是否有全局名称的冲突,PHP5.3后这种担心可大大减低, 其为我们提供了一种主流解决方案。

      关于此特性也颇具争议有人认为PHP的特点就是简单,在PHP5之后越加复杂违背了最初的理念,不过鄙人拙见认为语言就是应对解决问题而生有更好的解决方式就应该提倡。

    
    
<? php
namespace namespaceDemo;
class demoClass
{
function echoValue()
{
echo ' i am "\namespaceDemo\demoClass->echoValue" ' ;
}
}

$test = new \namespaceDemo\demoClass();
$test -> echoValue();

/* *
* output:
* i am "\namespaceDemo\demoClass->echoValue"
*/
?>

2.支持GOTO语句

      GOTO语句曾经颇受争议, 后来经过大师们很多次较量后才最终确认合理使用有益无害,PHP5.3之后也引入了此语句。

    
    
<? php
for ( $i = 1 ; $i <= 100 ; $i ++ )
{
if ( $i % 20 == 0 )
goto
end ;
}

end :
echo " 我是{ $i }我是第一个被20整除的数! " ;

/* *
* output:
* 我是20我是第一个被20整除的数!
*/
?>

3.新的静态魔术方法__callStatic.

      5.2支持通过魔术方法处理不存在方法的调用, 但其只支持非静态方法, 5.3版本引入了静态魔术方法。

    
    
<? php
/* *
* __callStatic魔术方法使用方式
*/
class callStatic
{
public static function __callStatic( $name , $arguments )
{
echo " <b>function name:</b> " ;
echo $name . ' <br> ' ;

echo " <b>function arguments:</b> " ;
print_r ( $arguments );
}
}

$callStatic = new callStatic();
echo $callStatic :: notExistsFun( array ( ' param1 ' , ' param2 ' ) );

/* *
* output:
* function name:notExistsFun
* function arguments:Array ( [0] => Array ( [0] => param1 [1] => param2 ) )
*/
?>

4.新的匿名魔术方法 __invoke.
      如果对象实现了__invoke魔术方法就可将其作为函数直接调用,实例化对象之后可用匿名函数的形式直接调用。
     
     
<? php
class invokeDemo
{
public function __invoke( $param1 , $param2 )
{
print_r ( array ( $param1 , $param2 ) );

echo ' <br> this is invoke magic function ' ;
}
}

$invokeDemo = new invokeDemo();
$invokeDemo ( ' param1String ' , array ( 1 , 2 , 3 ) );

/* *
* output:
* Array ( [0] => param1String [1] => Array ( [0] => 1 [1] => 2 [2] => 3 ) )
* this is invoke magic function
*/
?>

 

5.动态调用静态属性。

  PHP5.2之前静态方法是不支持用变量指定方法名称并动态调用的, 5.3之后引入了此功能。

    
    
<? php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
class dynamicCallStatic
{
public static function callStaticFunc()
{
echo ' i am callStaticFunc function ' ;
}
}

$funcName = ' callStaticFunc ' ;

dynamicCallStatic
:: $funcName ();

/* *
* output:
* i am callStaticFunc function
*/

?>

6.支持匿名函数(lumbda).

      5.3之后引入了匿名函数,对Javascript了解的人对其并不陌生它占了JS的重头戏,灵活运用匿名函数会带来很多便利,PHP的匿名函数作用域 和函数的作用域相同,不过可以通过内置语法USE传入全局变量,当然也可以在函数内部使用global或$GLOBALS调用全局变量。

    
    
<? php
$city = ' dalian ' ;
$closure = function ( $name ) use ( $city ){ echo $name , ' - ' , $city ; };

$closure ( ' jucky ' );

/* *
* output:
* jucky-dalian
*/
?>
    
    
<? php
$arr = array ( 3 , 2 , 5 , 6 , 1 );

usort (
$arr ,
function ( $a , $b )
{
if ( $a == $b )
return 0 ;
return ( $a < $b ) ? - 1 : 1 ;
}
);

print_r ( $arr );

/* *
* output:
* Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 5 [4] => 6 )
*/

 

7.新的三元操作符

      新三元操作符?:在判断表达式结果为TRUE时会返回此判断表达式的结果即?:之前的值, False时返回?:之后的值。

    
    
<? php
$result = true ;
echo $result == true ?: ' error code:20 ' ;
/* *
* output:
* 1
*/

$result = false ;
echo $result == true ?: ' error code:20 ' ;
/* *
* output:
* error code:20
*/
?>

 

8.全局空间内const代替define()函数可直接使用

    
    
<? php
const PLATFORM_NAME = ' Linux ' ;
echo PLATFORM_NAME;

/* *
* output:
* Linux
*/
?>

 

9.json_encode支持强制转换对象JSON

      5.3后的json_enocde可通过参数强制转换数组为对象形式JSON。

    
    
<? php
$arr = array ( 1 , 2 , 3 );
echo json_encode( $arr ) . ' <br> ' ;
echo json_encode( $arr , JSON_FORCE_OBJECT );
/* *
* output:
* [1,2,3]
* {"0":1,"1":2,"2":3}
*/
?>

 

10.默认启用SPL支持。

     SPL提供了很多激动人心的特性,具体包括数据结构类、迭代类、接口、异常、文件等通用功能类。

     数据结构提供了双向链表、栈、队列、堆、优先队列、固定大小数组、对象存储器, 但效率是否高于数组实现需要在应用内具体测试,方才测试队列类的效能发现低于原生实现, 不过固定数组的效率还是很可观的,下面代码是对固定大小数组的一个测试, 速度快了近1倍,详细代码如下:

 

    
    
$i = 1000000 ;
$spl = new SplFixedArray( 1000000 );
while ( $i -- ) {
$spl [ $i ] = 'SM ' ;
}

SplFixedArray数组运行时间与内存使用大小

Running time:0.2420928478241
Memory usage:52324152

Array数组运行时间与内存使用大小:

Running time:0.42152786254883
Memory usage:100517992

11.延迟静态绑定。

12.循环垃圾收集, 能够发现对象的循环引用并自动回收内存

13.支持phar归档

 

 

不兼容的特性:

1.atsort,natcasesort,usort,uasort,array_flip等数组函数不支持传入对象。

2.魔术方法必须声明为公共属性

3.从PECL移除的库,ncurses, fpdf, dbase, fbsql, ming.

4.废弃的tick, ereg正则。

5.namespace,Closure变成了保留值

6.http Stream流支持200-399全部状态

7.去除了magic quotes 和 register globals特性

8.出错提示信息与5.2版本相比有变化

9.以下配置项在PHP5.3将产生警告

define_syslog_variables
register_globals
register_long_arrays
safe_mode
magic_quotes_gpc
magic_quotes_runtime

        magic_quotes_sybase 

 
新的函数:

PHP Core:

Date/Time:

GMP:

Hash:

IMAP:

  • imap_gc() - Clears IMAP cache.
  • imap_utf8_to_mutf7() - Encode a UTF-8 string to modified UTF-7.
  • imap_mutf7_to_utf8() - Decode a modified UTF-7 string to UTF-8.

JSON:

MySQL Improved:

OpenSSL:

PCNTL:

PCRE:

  • preg_filter() - Perform a regular expression search and replace, reutrning only results which matched the pattern.

Semaphore:

The following functions are now natively implemented, making them available on all operating systems which can run PHP:

原有函数的参数变更:

PHP Core:

json:

Streams:

sybase_ct:

New method parameters in PHP 5.3.0:

PHP Core:

 

已使用5.3的应用:
drupal7.0
zend Home
 
参考文档:
PHP V5.3 中的新特性 John Mertic  http://www.ibm.com/developerworks/cn/opensource/os-php-5.3new1/index.html
Manual - Backward Incompatible Changes PHP  http://cn.php.net/manual/zh/migration53.incompatible.php
Manual - New features http://cn.php.net/manual/en/migration53.new-features.php
drupal - PHP 5.3 Compatibility  http://drupal.org/node/360605
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(154) | 评论(0) | 转发(0) |
0

上一篇:[转]PHP5.3语言特性

下一篇:盗版随想

给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值