php8.0弃用的函数

PHP 8.0是PHP语言重大更新版本之一,它引入了新的特性,同时还弃用了一些函数,行为和语法也有所修改。本文将详细介绍PHP 8.0弃用的函数和改变的语法。

一、弃用的函数

1. preg_replace()的 /e修饰符

在PHP 8.0版本中,/e修饰符已经被弃用,这意味着我们不能再使用它了。/e修饰符被用于执行一个字符串中的PHP代码,并将结果作为替换的字符串。

例如,在PHP 7中,我们可以使用以下代码将字符串中的数字相加:

```php

$str = '1+2';

$str = preg_replace('/(\d+)\+(\d+)/e', '$1+$2', $str);

echo $str; // 输出 3

```

在PHP 8.0版本中,如果我们尝试使用相同的代码,将会得到以下错误:

```php

preg_replace(): The /e modifier is no longer supported, use preg_replace_callback() instead

```

这意味着我们需要使用preg_replace_callback()函数来替换preg_replace()函数,并且必须传递一个回调函数来执行我们的代码。

2. 美元符号$用于重复定义同一变量

在PHP 8.0版本中,我们不能使用美元符号$来重复定义一个已经存在的变量。例如,以下代码在PHP 8.0版本中将会出错:

```php

$x = 10;

$x = $x + 1;

```

这是因为$x变量已经定义过一次,不能再用$x来定义$x。在PHP 7中,以上代码不会报错。

如果我们确实需要使用相同的变量名,可以使用新的声明语法,在变量名前加上变量类型来定义变量。例如:

```php

int $x = 10;

$x = $x + 1;

```

这将会正常工作并将$x的值增加1。

3. stristr()函数的第三个参数

在PHP 8.0版本中,stristr()函数的第三个参数已经被弃用。该参数指定在搜索中使用的字符集,我们应该使用mb_stristr()函数来代替。

例如,在PHP 7中,我们可以使用以下代码搜索一个字符串中的中文字符:

```php

$str = 'Hello 你好';

$pos = stristr($str, '你', true, 'UTF-8');

echo $pos; // 输出 Hello

```

在PHP 8.0版本中,如果我们尝试使用相同的代码,将会得到以下错误:

```php

stristr(): Passing locale as 4th parameter is deprecated since PHP 8.0.0, use stristr() with mb_strtolower() instead

```

这意味着我们需要使用mb_stristr()函数,同时使用mb_strtolower()函数来指定字符集:

```php

$str = 'Hello 你好';

$pos = mb_stristr($str, '你', true, 'UTF-8');

echo $pos; // 输出 Hello

```

4. strip_tags()函数的第二个参数

在PHP 8.0版本中,strip_tags()函数的第二个参数已经被弃用。该参数指定在过滤时保留的标签,我们应该使用新的可选参数-allowlist来代替。

例如,在PHP 7中,我们可以使用以下代码来过滤一个字符串中的a标签:

```php

$str = '

这是一个链接

';

$str = strip_tags($str, '链接

```

在PHP 8.0版本中,如果我们尝试使用相同的代码,将会得到以下错误:

```php

strip_tags(): `allow` option is deprecated, use `allowlist` instead

```

这意味着我们需要使用新的语法来指定保留的标签:

```php

$str = '

这是一个链接

';

$str = strip_tags($str, '链接

```

二、改变的语法

除了上述弃用的函数外,PHP 8.0还引入了一些新的语法,这些语法对于编写更好的PHP代码非常有用。

1. 匿名函数后必须加分号

在PHP 8.0版本以前,我们在创建匿名函数时不必在结尾加分号。例如,以下代码在PHP 7中是有效的:

```php

$func = function() {

echo 'Hello World';

}

$func();

```

在PHP 8.0版本中,该代码将会报错,因为缺少分号:

```php

Parse error: syntax error, unexpected '}'

```

在PHP 8.0版本中,我们必须在结尾处加上分号,例如:

```php

$func = function() {

echo 'Hello World';

};

$func();

```

2. match替换了switch

在PHP 8.0版本中,switch语句已经被新的match语法替换。match语法更加简洁和易于阅读。例如,以下代码在PHP 7中是有效的:

```php

switch ($value) {

case 1:

case 2:

echo 'Value is 1 or 2';

break;

case 3:

echo 'Value is 3';

break;

default:

echo 'Value is not 1, 2 or 3';

break;

}

```

在PHP 8.0版本中,我们可以使用match语法代替:

```php

match ($value) {

1, 2 => echo 'Value is 1 or 2',

3 => echo 'Value is 3',

default => echo 'Value is not 1, 2 or 3',

};

```

match语法更加简洁,并且易于阅读和维护。

总结

PHP 8.0引入了一些新特性和语法,同时也弃用了一些函数。在编写新的PHP代码时,我们应该学会使用新特性和语法,并且尽可能地避免使用过时的函数。这将有助于使我们的代码更加简洁,易于阅读和维护。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(26) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部