PHP8 —— New String Helpers

新增了三个字符串函数,str_starts_with, str_ends_with, str_contains, PHP 的函数这么方便,很难想象竟然一直没有这几个。 str_starts_with 判断字符串是否以另一个字符串开头,在PHP7以及之前 $id = 'inv_abcdefgh'; $result = strpos($id, 'inv_') === 0; var_dump($result); // true PHP8 中可以直接这么写 $result = str_starts_with($id, 'inv_'); str_ends_with 判断字符串是否以另外一个字符串结尾,在 PHP7 及之前,比较麻烦,通常是这么写 $id = 'abcd_inv'; $result = strpos(strrev($id), strrev('_inv')) === 0; 或者 $result = substr($id, -1 * strlen('_inv')) === '_inv'; 或者上正则吧 $result = preg_match('/_inv$/', $id) === 1; 看起来都是比较麻烦的。PHP8 里面可以简化成下面这样了 $id = 'abcd_inv'; $result = str_ends_with($id, '_ind'); str_contains 字符串包含,PHP8 之前一般就是 strpos 来实现了 $url = 'https://example?for=bar'; $result = strpos($url, '?') !== FALSE; PHP8 就直接一点 $result = str_contains($url, '?');

PHP 8 —— Nullsafe Operator

<?php
class User {
    public function profile() {
        return getPorfileFromDb(); //数据库查询
    }
}

class Profile {
    public function employment() {
        return 'web developer';
    }
}

$user = new User();
echo $user->profile()->employment();

如果profile() 返回了 null, 那么会报 Call a member function on null。 PHP8之前,我们需要加个检查。

$profile = $user->profile();

if ($profile) {
    echo $profile->employment();
}

PHP 8 提供了Nullsafe Operator,直接写成下面这种形式

$user->profile()?->employment();

如果 $user->profile()为空,则上面的表达式最终值为 NULL。

另外这种写法是可以串起来的,像下面这样

$user?->profile()?->employment();

也可以结合 ?? 写成下面这种形式

echo $user->profile()?->employment() ?? 'Not provided';

评论

此博客中的热门博文

D3js Data-binding basics

JavaScript 数据类型

Vue3新特性(1) —— Vite