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/
发表评论 取消回复