7新特性介绍详解介绍,新特性详解

1 PHP 5.3中的新特点

PHP 7在性质方面包车型客车突破成为最近最销路广的话题之一,近期官方PHP 7.0.0 Beta
2已经宣布
新特性
属性进步:PHP 7要比PHP 5.6快两倍
巨细无遗一致的64个人援助
移除了一部分老的不在扶助的SAPI(服务器端应用编制程序端口)和扩充
增加产量了空切合操作符(??)【wiki】

PHP 6.0新特性

 
   PHP下叁个遇到关心的本子6.0,已经进入snapshot阶段,不久将在发表。PHP
6.0将含有众多新的性子、语法立异,会让面向对象编制程序尤其简明,别的还应该有为数相当多最首要的精雕细刻,比方Unicode的骨干支撑,这将让PHP更契合全球限量支持和越来越的健康发展。PHP是曾经流行环球的开源脚本语言,在多元的网站上运营着,PHP
6.0将完全向前包容,同期扩大多数令人激动的性情。

  越来越好的Unicode帮助
NameSpace:名字空间,将更加好的制止在函数及类之间的变量名争辩。
让人激动的Web 2.0性情
SOAP: 轻松对象访问协议SOAP
能够和现成的多多因特网球协会构和格式结合使用,包罗超文本传输协议(
HTTP),轻易邮件传输协议(SMTP),多用途网际邮件扩张协议(MIME)。它还帮助从信息系统到长途进程调用(RPC)等大气的应用程序。
XML:从PHP
5.1本子起首,XMLReader和XMLWriter就曾经包罗在PHP内核,它可以让它能够让XML编程尤其自由自在。
自然,除了增添新的特色,一些会给系统带来不安宁因素和安全隐患的表征也将被吊销,以下是收回的始末列表:
magic_quotes

register_globals

7新特性介绍详解介绍,新特性详解。register_long_arrays

safe_mode

magic_quotes

6.0新特色
PHP下八个遭遇关注的版本6.0,已经进入snapshot阶段,不久快要宣告。PHP
6.0将含有众多新的表征、语法创新,会让面向对象编制程序…

1.1 帮助命名空间 (Namespace)

$username = $_GET[‘user’] ?? ‘nobody’;
// equivalent to: $username = isset($_GET[‘user’]) ? $_GET[‘user’]
: ‘nobody’;

毫无疑问,命名空间是PHP5.3所带动的最重要的新特征。

新增了组合比较运算符(<=>)【wiki】

在PHP5.3中,则只供给钦命差异的命名空间就能够,命名空间的相间符为反斜杆\。

$a = 1;
$b = 2;
 
switch ($a  <=> $b)
{
    case 1:
        echo “a > b”;
        break;
    case 0:
        echo “a == b”;
        break;
    case -1:
        echo “a < b”;
        break;
}

//select.php
<?php   
    namespace Zend\Db\Table;   
    class Select {

新添了函数的回来类型申明【wiki】

    }
?> 

function foo(): array {
    return [];
}

这么纵然别的命名空间下存在名字为Select的类,程序在调用时也不会发生争辨。代码的可读性也持有增加。
调用方法:

新扩大了标量类型注脚【wiki】

//call.php
<?php   
    //namespace Zend\Db;   
    include(‘select.php’);   
    $s = new Zend\Db\Table\Select();   
    $s->test();
?>

//标量评释的显要意义是全自动完结参数的强制类型转变
//变量类型注解(int, float, string , bool)
function add(int $a, int $b): int {
    return $a + $b;
}

1.2. 帮忙延迟静态绑定(Late Static Binding)

增加产量加佚名类【wiki】

在PHP5中,大家得以在类中通过self关键字只怕__CLASS__来判别或调用当前类。但有叁个难点,倘若大家是在子类中调用,获得的结果将是父类。因为在接二连三父类的时候,静态成员就曾经被绑定了。
比方:

class Foo {}
$child = new class extends Foo {};
var_dump($child instanceof Foo); // true

<?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();

可捕获致命错误,较早版本只好通过register_shutdown_function()事后拍卖。(wiki)

//以上代码输出的结果是: A ;
那和大家的料想不相同,大家原来想博得子类的应和结果。

Benchmark
测试代码:
$count = $argv[1];
 
$a = array();
for ($i = 0; $i < $count; $i++) {
    $a[$i] = $i;
}
 
foreach ($a as $i) {
    array_key_exists($i, $a);
}

PHP 5.3.0中追加了三个static关键字来引用当前类,即落成了推迟静态绑定:

测试效果如下

<?php   
class A {   
    public static function who() {   
        echo __CLASS__;   
    }   
    public static function test() {   
        static::who(); // 这里完成了延期的静态绑定   
    }   
}   
class B extends A {   
    public static function who() {   
        echo __CLASS__;   
    }   
}   
   
B::test();

可知PHP 7相对于PHP 5.4有好多倍以上的进程提高。

//以上代码输出的结果是: B

图片 1

1.3 支持goto语句

社区中的Benchmark结果:

大多管理器程序设计语言中都协助无条件转向语句goto,当程序实践到goto语句时,即转向由goto语句中的标号提出的先后地点继续实践。纵然goto语句有希望会招致程序流程不明晰,可读性裁减,但在好几情况下具备其与众差异的平价之处,举例中断深度嵌套的循环和
if 语句。

图片 2

<?php 
 
    goto a;   
    echo ‘Foo’;   
    a:   
    echo ‘Bar’;   
    for($i=0,$j=50; $i<100; $i++) {   
      while($j–) {   
        if($j==17) goto end;   
      }   
    }   
    echo “i = $i”;   
    end:   
    echo ‘j hit 17’; 

以WordPress开源博客首页为测试场景的测试结果:

1.4 辅助闭包、Lambda/Anonymous函数

图片 3