即将到来的PHP 7.1的功能:速度令人印象深刻PHP 7.1.的即将到来的功能

The time to meet and greet PHP 7.0 is not so distant, and PHP 7.1 is already knocking at the door ! Since last year, the PHP group has been busy adding features, fixing old ones and keeping the new version as fast as possible : yet, PHP 7.1 managed to have an impressive list of new features. The RFC web site (//wiki.php.net/rfc) has been voting a lot, and coding even more. Let’s see what are the upcoming features of PHP 7.1.

这是我们系列关于PHP 7.1中的最后一个功能的第一部分。看 '即将到来的PHP 7.1(A部分)' 和‘PHP 7.1.中的更多即将到来的功能(b部分)‘ and ‘PHP 7.1.中的最后一个特征(第C部分)

列表()现代化

尊敬的 列表()函数(原谅我的法语,语言结构)收到了很多发展,并已升级很好。

<?php
// PHP 7.0 
$array = [0 => 'a', 1 => 'b', 2 => 'c'] ;
list($a, $b, $c) = $array ;
// $a is 'a', $b is 'b', $c is 'c'
?>

首先,现在可以提及偏移,不仅依赖于整数索引来分配值。这会保存左侧操作数上的调用array_values(),以及其他阵列操作以确保索引的顺序与列表()调用中的变量相同。

<?php
// PHP 7.1
$array = [0 => 'a', 1 => 'b', 2 => 'c'] ;
list(1 => $b, 2 => $c, 0 => $a) = $array ;
// $a is 'a', $b is 'b', $c is 'c'
?>

此外,可以使用列表()调用中的任何数据容器:变量,带有偏移,属性,数组的阵列附加或静态属性。

<?php
class foo {
    private $a, $b, $c;
 
    public function __construct(array $bar) {
        list(
            "a" => $this->a,
            "b" => $this->b,
            "c" => $this->c
        ) = $bar;
    }
}
?>

同样,此语法很短,替换了很多类似的类似代码。

最后,列表()本身已缩短以使用PHP 5.4引入的阵列短语法。上述所有善良也可提供简单的括号:

<?php
class foo {
    private $a, $b, $c;
 
    public function __construct(array $bar) {
        [   "a" => $this->a,
            "b" => $this->b,
            "c" => $this->c
        ] = $bar;
    }
}
?>

它也可以在其他调用列表()中嵌套列表():破坏多维数组!

<?php
$points = [
    ["x" => 1, "y" => 2],
    ["x" => 2, "y" => 1]
];
 
list(list("x" => $x1, "y" => $y1), list("x" => $x2, "y" => $y2)) = $points;
?>

最后,一个人能够为不同的变量分配几个相同的值,只需提及相同索引的多次,在表达式的左侧部分:

<?php

[ 4 => $a, 4 => $b, 4 => $c] = [ 4 => 5];

// $a, $b and $c, all, contain 5 
?>

阅读RFC的其余部分(列表键 and 简短列表语法),有很多例子。

负偏移的概括

使用许多字符串函数时,可以提及负偏移量,该偏移量表示从字符串的最后一个字符开始的偏移量。

<?php
	echo substr("abcde", 1, 1) ; // display b
	echo substr("abcde", -1, 1) ; // display d
?>

这种类型的符号已经概括,并且可用于在字符串中达到任何字符:

<?php
	echo "abcde"[1] ; // display b
	echo "abcde"[-1]  ; // display d
?>

剩下的唯一位置是一个字符串内部的阵列插值:有负数仍被视为奇怪的表达式,并产生致命错误:

<?php
	$a = "abcde" ;
	echo "$a[-1]";
?>

解析错误:语法错误,意外‘-‘,期望标识符(t_string)或变量(t_variable)或数字(t_num_string)

void返回类型

void在PHP 7.0中不是保留的关键字,但它设法加入聚会,以及int,string和array,尽管这仅作为返回类型可用,而不是参数。当函数不起时,必须使用void返回类型’t return anything.
跳过返回语句,或返回没有参数有效:通过省略返回的值,代码意味着该函数没有显着的返回值。另一方面,返回NULL不被接受为返回void:由于代码具有显式返回值,因此它具有另一个含义。

<?php
function foo ($arg) : void {
	return ;
}
?>

PHP检查编译时返回值。在表达式中使用void返回函数仍然可以:它会引入太多的后向不兼容性来值得强制执行。

regex / E选项已弃用(再次)

它被推迟于PHP 5.6 for PREG_REPLACE,它现在已弃用 mb_ereg_replace.  and  mb_eregi_replace.。 Ext / MBString具有相同的替代方案 mb_ereg_replace._callback.而不是pcre preg_replace_callback.。它可能缺乏 preg_replace_callback._array.但是(如果你不是’知道它,去学习)

毫不弃用的Mcrypt

“ 让’S脱离Ext / Mcrypt,它是放弃软件,并尽快抑制语言的生长,尽快成为可能的。 »,说明RFC。从PHP 7.1开始,所有MCrypt函数都会提高E_deprecated错误,并将删除下一次迭代。
如果您需要加密,请使用 ext/openssl。如果你真的需要它,请准备好去 PECL. to compile it.

更多关于PHP 7.1下周

这足以让第一部分。我们’LL在下周返回更多关于PHP 7.1,覆盖可用类型,班级恒定的可见性,八进制和无效的字符串算法等等!