无涯教程-PHP 7.3 新特性

69 阅读2分钟

is_countablerfc

当计数不可数的对象时,PHP 7.2添加了警告。 is_countable函数可以帮助防止此警告。

$count = is_countable($variable) ? count($variable) : null;

array_key_first and array_key_last rfc

这两个函数基本上可以按照名称所说的进行操作。

$array = [
    a => …,
    b => …,
    c => …,
];


array_key_first(array</span><span class="pun">);</span><span class="pln"> </span><span class="hljs-comment"><span class="com">// a</span></span><span class="pln">
array_key_last</span><span class="pun">(</span><span class="pln">array); // c

array_key_first(array</span><spanclass="pun">);</span><spanclass="pln"></span><spanclass="hljscomment"><spanclass="com">//a</span></span><spanclass="pln">arraykeylast</span><spanclass="pun">(</span><spanclass="pln">array</span><span class="pun">);</span><span class="pln"> </span><span class="hljs-comment"><span class="com">// a</span></span><span class="pln"> array_key_last</span><span class="pun">(</span><span class="pln">array); // c

原始RFC还提出了 array_value_first array_value_last , 但是这些遭到了大多数人的反对。

另一个 array_first  和  array_last 被返回一个元组 [$key => $value],目前,无涯教程只有两个函数来获取数组的第一个键和最后一个键。

灵活的Heredoc语法 rfc

Heredoc对于较大的字符串可能是有用的工具,尽管过去它们有缩进的怪癖。

// Instead of this:


$query = <<<SQL
SELECT *
FROM table
WHERE column = true;
SQL;




// You can do this:




$query = <<<SQL
SELECT *
FROM table
WHERE column = true;
SQL;

$query = <<<SQL SELECT * FROM table WHERE column = true; SQL;

在已经嵌套的上下文中使用Heredoc时,这特别有用。

结束标记前面的空白将在所有行上被忽略。

重要说明:由于此更改,一些现有的Heredocs可能会中断, 当他们在体内使用相同的结束标记时。

$str = <<<FOO
abcdefg
    FOO
FOO;


// Parse error: Invalid body indentation level in PHP 7.3

// Parse error: Invalid body indentation level in PHP 7.3

函数调用中的尾部逗号 rfc

数组已经可以实现的函数,现在也可以通过函数调用来实现。 注意,在函数定义中是不可能的!

$compacted = compact(
    posts,
    units,
);

更友好的错误信息

TypeErrors用于整数和布尔值,用于打印其全名, 它已更改为 int bool ,以匹配代码中的类型提示。

Argument 1 passed to foo() must be of the type int/bool

与PHP 7.2相比:

Argument 1 passed to foo() must be of the type 
integer/boolean

JosnException异常 rfc

以前,JSON解析错误调试起来很麻烦。 JSON函数现在接受一个额外的选项,使它们在解析错误时引发异常。 显然,此更改添加了一个新的异常: JsonException

json_encode($data, JSON_THROW_ON_ERROR);


json_decode("invalid json", null, 512, JSON_THROW_ON_ERROR);




// Throws JsonException

// Throws JsonException

虽然此函数仅在新添加的选项中可用, 有可能它将成为将来版本中的默认行为。

列表引用分配 rfc

list()及其速记的 [] 语法现在支持引用。

$array = [1, 2];


list(a</span><span class="pun">,</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln">b) = $array;




$b = 3;




// $array = [1, 3];

// $array = [1, 3];

Compact未定义变量 rfc

传递给 compact 的未定义变量将被通知,并且之前会被忽略。

$a = foo;


compact(a, b);




// Notice: compact(): Undefined variable: b

// Notice: compact(): Undefined variable: b

Same site cookie rfc

此更改不仅添加了新参数, 它也以不变的方式更改了 setcookie setrawcookie session_set_cookie_params 函数的工作方式。

它们现在不再支持已经庞大的函数,而是支持一系列选项,同时仍向后兼容。 一个例子:

bool setcookie(
    string $name 
    [, string $value = "" 
    [, int $expire = 0 
    [, string $path = "" 
    [, string $domain = "" 
    [, bool $secure = false 
    [, bool $httponly = false ]]]]]] 
)


bool setcookie (
string name 
    </span><span class="pun">[,</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> value = ""
[, int expire </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> 
    </span><span class="pun">[,</span><span class="pln"> array options ]]]
)




// Both ways work.

// Both ways work.

字符串搜索函数 README

您不能再将非字符串针传递给字符串搜索函数。 这些是受影响的函数:

strpos()
strrpos()
stripos()
strripos()
strstr()
strchr()
strrchr()
stristr()

参考链接

www.learnfk.com/php7+/new-i…