共计 1889 个字符,预计需要花费 5 分钟才能阅读完成。
距离 PHP 7.3
的发布也没有过去多久,话不多说我们下面讲讲这个版本带来的新特性和函数等一系列功能。详细的官方文档请查看 这里。
允许在函数或方法调用中使用尾随逗号
数组已经可以实现的该功能,现在也可以调用函数中使用。请注意,此功能在函数或方法定义的时候不允许使用该特性。
<?php
class Test
{public function one(int $a, int $b)
{return $a + $b;}
}
function two(string $a, string $b)
{return $a . $b;}
// 在 7.3 以前他将是个错误的语法
echo (new Test())->one(1, 2,);
echo two('hello', 'word',);
// 错误的定义
function two(string $a, string $b,)
{return $a . $b;}
Heredoc 语法
在过它需要强制尾部缩进,现在这一怪癖被移除。
<?php
// 在之前:
$query = <<<SQL
SELECT *
FROM `table`
WHERE `column` = true;
SQL; // 必须在开头
// 现在:
$query = <<<SQL
SELECT *
FROM `table`
WHERE `column` = true;
SQL;
注意:由于这种变化,一些现有的 Heredocs 可能会在它们的结构中使用相同的结束标记时会被破坏。
<?php
$str = <<<FOO
abcdefg
FOO
FOO;
// Parse error: Invalid body indentation level in PHP 7.3
JSON 异常
现在如果通过 json_encode
, json_decode
两个函数执行失败会抛出一个 JsonException
类型的异常。
<?php
use JsonException;
use Exception;
try {$json = json_encode("{", JSON_THROW_ON_ERROR);
return base64_encode($json);
} catch (JsonException $e) {throw new Exception('json_encode 失败.', 0, $e);
}
// 在这之前
$json = json_decode("{");
if (json_last_error() !== JSON_ERROR_NONE) {echo json_last_error_msg() // "Syntax error"
}
list 引用
list()
及其简写 []
语法现在支持引用。
<?php
$array = [1, 2];
list($a, &$b) = $array;
$b = 3;
// $array = [1, 3];
compact 未定义变量
在这之前如果 compact
如果使用了一个未定义的变量,它将被忽略。现在它抛出一个未定义的警告。
<?php
$a = 'foo';
compact('a', 'b');
// Notice: compact(): Undefined variable: b
弃用和删除不区分大小写的常量
查看具体的 RFC 描述。
<?php
namespace {define('NS\FOO', 42, true); // Case-insensitive constant
}
namespace Test {
use const NS\FOO;
var_dump(FOO); // Works
var_dump(foo); // Warning: Use of undefined constant foo
}
新增函数
以下几个函数个人认为比较常用。
is_countable
当你一个类实现了 Countable
接口,我们就可以调用 count
函数。
<?php
class CountMe
{
protected $myCount = 3;
public function count()
{return $this->myCount;
}
}
$countable = new CountMe();
echo count($countable); //result is "1", not as expected
array_key_first 和 array_key_last
正如名字一样,取得数组第一项的 key
和取得数组最后一项的key
。
<?php
$array = ['a' => '...', 'b' => '...', 'c' => '...'
];
echo array_key_first($array); // 'a'
echo array_key_last($array); // 'c'
其实在 RFC 中还有array_value_first, array_value_first,但是大多数反正了这个投票。
在 PHP 7.3
增加了多字节字符串处理的功能,可以通过官方 查看。
正文完