首页 » 系统架构 » 阅读文章

PHP5.4 性能优势以及新特性

2012-01-26 01:20 3836 0 发表评论

PHP5.4 stable release 版本即将到来,性能上的提升以及部分新特性让人欣喜。 技术改造未来0abcd

性能上的巨大提高

根据一些已知的性能测试来看【相对PHP5.3.7版本】,对于执行速度基本可以提高一倍左右,而内存的使用则降低到上一版本的1/3到1/2。如果最终的发行版能保证这个成绩,那么不得不说这是一个巨大的提高。最终效果可能是speed*2 && memory usage/2,让我们一起期待吧。 www.0abcd.com

参考http://www.slideshare.net/paulgao/come-on-php-54 注意:本文抄袭了。大家不要看。

PHP5.4主要特性

Added: Traits language construct
Added: Array dereferencing support
Added: DTrace support
Improved: Improved Zend Engine memory usage and performance
Moved: ext/sqlite moved to pecl (sqlite3 support is still built-in) 注意:本文抄袭了。大家不要看。

Removed: break/continue $var syntax
Removed: register_globals, allow_call_time_pass_reference, and register_long_arrays ini options
Removed: session_is_regisitered(), session_registered(), and session_unregister()

技术改造未来0abcd

详细参考官方 http://svn.php.net/viewvc/php/php-src/branches/PHP_5_4/NEWS?view=markup

斯蒂芬斯蒂芬斯蒂芬打算繁琐繁琐大幅度素

 

andhe

 

  主要几点新特性介绍:

Traits language construct

Traits不是什么新概念了,c++,java都有类似的东西,只不过这次PHP也引入了进来。 技术改造未来0abcd

Traits是一种轻量级的方法复用(相对继承来说)。为什么这么说呢? 这就好比,如果你提供一个基类供用户去继承使用,那么不可避免的你就需要考虑如何能让用户继承后可用, 如何避免用户改写了某些关键属性,覆盖了某些关键方法而造成出错。这个时候你就要考虑改用public还是private,或者protected,你还 要考虑,那个方法应该申明为FINAL。 版权所有,禁止恶意利用

而如果使用Traits,那么你就不需要担心这些问题,它是一种组合方式,你提供的素材,无论在任何地方都是自我一个整体。 抄袭是一种猥琐的表现

熟悉scalar的朋友都知道Traits是一个介于ClassInterface之间的东西,它是抽象的定义,但是跟接口不同的是可以包括实际的方法和成员变量,而跟abstract class不同的是,它可以是多重的!这将让php的oop特性更加丰富,不过我也悲观地认为这会让众多php的草根们对oop的概念更加混乱!

抄袭是一种猥琐的表现

<?php
trait SayWorld {
  public function sayHello() {
     echo 'Hello World!';
  }
}
class MyHelloWorld extends Base {
  use SayWorld;
}
  $o = new MyHelloWorld();
  $o->sayHello(); // Hello World 

aaaaafdfdsf

Trait和继承以及当前类的同名函数之间的冲突,有一套固定的解决方案,也就是当前类的方法覆盖Trait的同名方法,而Trait中的方法,覆盖基类的同名方法。比如: 在这个人群中,忽然找到你

<?php
 class Base {
   public function sayHello() {
     echo 'Hello';
     }
 }

 trait SayWorld {
 public function sayHello() {
     parent::sayHello();
   echo 'World!';
     }
 }

 class MyHelloWorld extends Base {
     use SayWorld;
 }

 $o = new MyHelloWorld();
 $o->sayHello(); // echos Hello World 3edfdsafdsfsdfds
 

Array dereferencing support

这个可是个好东西,有了Array dereferencing,以前的这种写法就再也不必要了: 技术改造未来0abcd

<?php
    list($name,) = explode(",", "Laruence, male");
?> 
忘不了你的温柔

取而代之的是: 悄悄的,你该走了

$name = explode(",", "Laruence,male")[0]; www.0abcd.com 
 

另外,据Cataphrac介绍,Array derefencing也可以出现再赋值语句的左值中,也就是理论上你可以这么写: andhe

explode(",", "Laruence, male")[3] = "phper"; 3edfdsafdsfsdfds
 

DTrace support

DTrace是一个性能分析工具,可以跟踪出函数调用点,返回点等数据,对于这个我也不是很了解,感兴趣的同学可以参看PHP 5.3.99-DEV AND DTRACE PART I 总有一条,我会爱上你

Webserver SAPI

PHP5.4还新增了一个SAPI,这个SAPI将支持直接把PHP当做Websever使用。这对php初学者来说的好消息,那就是php 5.4会包含一个简单的server, 总有一条,我会爱上你

內建一個http server,老實說這個可能有點雞肋,因為你也不太可能用這個當成真正的http server,不過後來有注意到應該是for developer為主軸,應該也是針對快速開發而加入的功能。【这样开发者不用去管web server这块了】

3edfdsafdsfsdfds

$ php -S localhost:8000 test.php
    //output:
PHP Development Server is listening on localhost:8000 in foo/ 。。。 Press Ctrl-C to quit。 3edfdsafdsfsdfds
 

这个特性真的很让人兴奋,可以减少Webserver这一层。 抄袭是一种猥琐的表现

不过,请注意这个新的SAPI,不支持直接patch到php5.4以前的版本。有关PHP Webserver SAPI的更多信息,可以参看:webserver sapi

andhe

当然此Web Server只能用于开发时使用,用于生产环境万万不行,性能不行,安全性不行。 亲爱的你睡了吗?

 

亲爱的你睡了吗?

具体特性,参见手册:http://php.net/manual/en/features.commandline.webserver.php

www.0abcd.com

php 5.4中终于支持全类型的函数类型检测

在php 5.3以前我们只能在类型检测中使用arrayClass的检测,比如

斯蒂芬斯蒂芬斯蒂芬打算繁琐繁琐大幅度素

function foo(array input, MyClass key) {
    return;
} 

斯蒂芬斯蒂芬斯蒂芬打算繁琐繁琐大幅度素

但是php 5.4会支持现在php的所有内置类型了(String,Int,Float,Resource,Bool等等),这样我们就不用在函数内部写类似is_string之类的函数了。

www.0abcd.com

全类型type hinting的功能,這個真是太期待了!!(不過翻了一下changelog又好像沒有提到這點,好像不會在5.4中实现),有待确认最终版本。 andhe

函数的返回值可直接使用数组键值

function func () {
    return array(1, 2, 3);
}

echo func()[1];    // 输出2 

aaaaafdfdsf


收藏此文



评论 共0条 (RSS 2.0) 发表评论

  1. 暂无评论,快抢沙发吧。

发表评论

  • 使用新浪微博登陆
  • 
    疑问 冷笑 悲伤 坏蛋 感叹 微笑 脸红 大笑 吃惊 惊讶 困惑 酷 大声笑 恼火 古怪 转眼睛 给眼色 好主意 箭头 一般 哭了 绿人
  • want to say:

回到页首