Home » Code » 关于PHP7你应当知道的9件事

关于PHP7你应当知道的9件事

如果你是一个网页开发者或网站管理员,喜欢用一些由PHP驱动的内容管理系统比如WordPress、Drupal、Joomla或者是Magento,对于这个消息你应该感到高兴:根据PHP官方时间表,PHP7在2015年12月3日正式发布,现已准备好用于生产环境。

PHP7是一个能提供从云端企业应用到移动网页应用的强大平台。在PHP7这棵保护伞下,我们需要的所有东西基本都有了。这个版本有着重大的影响,因为它降低了内存消耗,极大的提高了性能。

现在不用PHP7那就OUT了。在这篇文章里,我会把关于PHP7的你需要知道的重要信息一一告诉你。

1、不要困惑于6或7

PHP7是PHP5.6之后的新版本。由于PHP6已经存在,开发者也在它身上尝试着做了一些实验性质的项目,但这个版本的PHP从没达到过生产阶段。经过辩论,PHP官方开发组决定将新版本命名为PHP7,略过PHP6。

该决定有助于避免用户混淆以前的实验与最新的发展。

 

2、PHPNG,新核心

自从1999年PHP4发布以来,这个平台一直由Zend engine驱动着。

Zend engine是一个用C语言编写的开源执行引擎,它被用来解释PHP语言。PHP5.x用Zend Engine II来进一步增强先前引擎的性能。

然而PHP7使用了代号为PHPNG(Next Generation)的Zend Engine。

 

3、双倍的速度

使用新的PHPNG引擎带来了很多改进,最大的改进莫过于性能上的提高。PHPNG是Zend Engine新的结构,它极大的优化了内存的使用。

通过使用PHP7,你能用更少的服务器来服务同样数量的用户。下图是Zend性能小组提供的性能基准数据。

 

4、强大的错误处理

对于PHP开发者来说,处理可捕获的致命错误从来不是一件简单的事。处理这些致命错误唯一的方案就是使用异常。新的Zend Engine为PHP开发者还来了便利的方案来处理这些错误,而不是非常不专业的直接系统运行失败。

新引擎中的异常对象不再继承自之前版本的异常基类。从这个对象可以看出,新系统使用了之前版本的接口和数据,在处理错误时产生了不同种类的传递引擎的异常。

PHP7允许开发者通过引入新的父类来捕获所有类型的异常(更多信息参考这里)。


function call_method($obj)
{
    $obj->method();
}

call_method();
//Fatal error: Call to a member function method() on null in E:\amp\apache\htdocs\html.php on line 5

在新版本中,你可以这样来处理:


try
{
    call_method();
}
catch (Throwable $t)
{
    echo $t->getMessage();
    //Too few arguments to function call_method(), 0 passed in E:\amp\nginx-1.11.8\html\test\index.php on line 10 and exactly 1 expected
}

5、64位Windows系统支持

PHP天然的运行环境是Linux,因为PHP本身是LAMP技术栈的重要成员。但也不是说不可能在Windows系统上运行PHP。现在有两种位数类型的Windows系统:x86和x64。PHP5.x没有提供x64位Windows系统的支持,PHP7则带来了x64位Windows系统的支持,同时也支持大文件。

6、新的太空船(<=>)和Null合并(??)运算符

太空船运算符的官方名称是结合比较运算符(Combined Comparison Operator),该运算符的符号就像一艘太空船一样:<=>。

如果左边运算对象和右边运算对象相等,该运算符会返回0。如果左边运算对象大于右边运算对象则返回1,如果左边运算对象小于右边运算对象则返回-1。这种三元比较运算符不仅存在于PHP,同样存在于其他编程语言如Perl和Ruby。

Null合并——表示为??,用于检查值是否存在,如果值不存在则返回一个默认值。具体表现为:从左往右第一个存在且不为Null的操作数会被返回,如果都没有定义且不为Null,则返回Null。


$x = NULL;
$y = NULL;
$z = 3;
var_dump($x ?? $y ?? $z); // int(3)
 
$x = ["yarr" => "meaningful_value"];
var_dump($x["aharr"] ?? $x["waharr"] ?? $x["yarr"]); // string(16) "meaningful_value"

7、允许精确的类型声明

PHP7允许开发者使用返回类型声明来强化代码质量从而避免一些无意的非法返回值。


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

如上展示的是一个简单的foo()函数使用,这个函数期望返回一个数组。

PHP7为标量值引入了4种新的类型声明,这些类型是int,float,string,bool,这些新的标量类型允许开发者指定返回值是整型,浮点型,字符串和布尔类型。

8、新增匿名类

PHP7允许开发者在OOP中使用匿名类。这个概念在其他面向对象的编程语言如C#、Java中早已存在。匿名类——相对通过名称来定义的类来说——它是没有名称的。但是通过它实例化出来的对象跟有名称的类实例化出来的对象功能是一样的。

匿名类跟传统的类语法完全相同,唯一区别就是没有名称。使用匿名类的优势是它能加快代码运行速度减少时间消耗,另外当一个类不需要记录的时候,使用匿名类也是一个很好的方案。


var_dump(new class($i) {
    public function __construct($i) {
        $this->i = $i;
    }
});

9、从同一个命名空间导入

组声明导入——当开发者需要从一个命名空间导入很多类时是很有用的功能。这个新的语法帮助开发者节省很多没用的单词,使得代码更紧凑干净可读,当然这直接节约的打字时间。

使用组声明导入,也使代码阅读和调试变得更简单清晰,便于开发者识别一个模块中同一命名空间的导入。


// Proposed group use syntax:
 
use FooLibrary\Bar\Baz\{ ClassA, ClassB, ClassC, ClassD as Fizbo };
 
// Compared to current use syntax:
 
use FooLibrary\Bar\Baz\ClassA;
use FooLibrary\Bar\Baz\ClassB;
use FooLibrary\Bar\Baz\ClassC;
use FooLibrary\Bar\Baz\ClassD as Fizbo;

总结

PHP7的目标:提高性能,减少尚消耗。为了这个至关重要的目标,已经废弃了许多功能函数不再支持一些老的服务器API和扩展

通过彻底移除这些在PHP5中就标记废弃以及很长一段时间内都没有被使用的内容,PHP7也变得更加安全了。如果你的代码运行在旧版本的PHP上,PHP7可能会破坏你的代码。

这篇文章只是让你对PHP7的先进性有个粗略的了解。在下个版本中,你会看到更多的增强功能和新的改进,这对PHP开发者和程序员来说都是值得兴奋的。你可能会遇到一些bug,请耐心等待。这就是系统 测试,而你也会从中学得越多,最终成为PHP界的精英!

欢迎在下边评论框中告诉我们关于PHP7你最喜欢的功能。

翻译自:http://www.arpatech.com/blog/9-best-things-you-should-know-about-php7/

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Time limit is exhausted. Please reload CAPTCHA.