PHP7.3常用新特性和函数

2,685次阅读

共计 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_encodejson_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_firstarray_value_first,但是大多数反正了这个投票。

PHP 7.3 增加了多字节字符串处理的功能,可以通过官方 查看

正文完
 
Blood.Cold
版权声明:本站原创文章,由 Blood.Cold 2019-06-01发表,共计1889字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。