PHP 7.4

新特性

  • 类属性支持添加类型
<?php

class User
{
    public int $id;
    public string $name;
}

$user = new User();
$user->id = '18';
$user->name = 1234;

// int(18)
var_dump($user->id);
// string(4) "1234"
var_dump($user->name);
  • 箭头函数

更简洁的一种 匿名函数,比较适用于仅在一处使用到

<?php

$y = 1;
$func = fn($x) => $x + $y;
// int(2)
var_dump($func(1));

$func2 = function($x) use ($y) {
    return $x + $y;
};
// int(2)
var_dump($func2(1));
  • 空合并运算符赋值
<?php

$array['name'] = 'jason';
$array['age'] ??= 18;

// {"name":"jason","age":18}
echo json_encode($array);
  • 数据展开操作
<?php

$part = [10, 20, 30];
$array = [1, 2, 3, ...$part, 4, 5, 6];
// [1,2,3,10,20,30,4,5,6]
echo json_encode($array);
  • 数值文字分割符
<?php

// 可以让读者更直观的一眼到出数值是多少
// 4287826
echo 428_7826;

限制:_ 前后都必须是数字,形如:123_.12,12._01 都会抛出错误

新增函数

password_algos():array

返回可用的密码哈希算法ID列表

不向后兼容的变更

  • fn 关键词

fn 成为了保留关键词。需要特别注意,它不能再做为函数名或类名使用,但是仍然可以做为方法名和常量名存在。

  • Serialization 序列化

序列化类型 o 被移除。因为它不是由 PHP 生成的,这可能会影响到之前项目中手动生成的序列化字符串。

  • fread() and fwrite() 函数

fread() 和 fwrite() 在操作失败的时候会返回 FALSE。之前的版本中会返回空字符串或 0。

  • 接收到的 Cookies

从 PHP 7.4.11 开始,为了安全考虑,接受到的 Cookie 中的 names 参数不再被 URL 编码。

废弃的功能

  • 没有显式括号的嵌套三元运算符
<?php
1 ? 2 : 3 ? 4 : 5;   // deprecated
(1 ? 2 : 3) ? 4 : 5; // ok
1 ? 2 : (3 ? 4 : 5); // ok
  • 大括号访问数组和字符串索引

使用大括号访问数组及字符串索引的方式已被废弃。请使用 \(var[\)idx] 的语法来替代 \(var{\)idx}。

  • (real) 类型和 is_real() 函数

(real) 类型已被废弃,请使用 (float) 来替代。
同时被废弃的还有 is_real() 函数,请使用 is_float() 来替代。

  • parent 关键词在没父类的类中使用
    在没有父类的类中使用 parent 关键词已被废弃,并且在将来的 PHP 版本中将会抛出一个编译错误。目前只在运行时访问父类时才会产生错误。
<?php

class User {
    public function getName() {
        parent::getName(); // 编译错误
        // ...
    }
}
  • allow_url_include INI 选项

配置文件中的 allow_url_include 选项被废弃。如果启用了该选项,将会产生一个弃用通知。

  • 在对象中使用 array_key_exists()

在一个对象中使用 array_key_exists() 已被废弃。请使用 isset() 或 property_exists() 来替代。

  • hebrevc() 函数
    hebrevc() 函数已被废弃。 可以用 nl2br(hebrev($str)) 来替代,更好的方法是启用 Unicode RTL 来支持。

  • convert_cyr_string() 函数
    convert_cyr_string() 函数已被废弃。可以用 mb_convert_string(), iconv() 或 UConverter 替代。

  • money_format() 函数

money_format() 函数已被废弃。 可以用更国际化的 NumberFormatter 功能来替代。

  • implode 函数的参数顺序
    implode() 允许反转参数顺序的特性已被废弃,请使用 implode(\(glue, \)parts) 来替代 implode(\(parts, \)glue)。

发表评论

您的电子邮箱地址不会被公开。