PHP 7.4 编程语言发布

经过一年的发展 提交 编程语言发布 PHP 7.4的。 新分支包含一系列新功能,以及一些破坏兼容性的更改。

钥匙 改进 在 PHP 7.4 中:

  • 类型属性 - 类属性现在可以包含类型声明,例如:

    类用户{
    公共 int $id;
    公共字符串$名称;
    }

  • 缩写 用于定义具有按值范围绑定的函数“fn(parameter_list) => expr”的语法。 例如,“fn($x) => $x + $y”类似于“$fn2 = function ($x) use ($y) {return $x + $y;}”);
  • 简写赋值运算符 “??=”可用于定义默认值(“a ??= b”类似于“a = a ?? b”,如果定义了“a”,则存储其值,如果未定义,则存储“a”)被赋予值“b”);
  • 有限的 机会 保留派生返回类型中类型的继承层次结构,或者能够反转派生参数类型中原始类型的层次结构(协方差 返回类型和参数类型逆变)。 现在可以在 PHP 中使用以下结构:

    A类{}
    B 类扩展 A {}

    类生产者{
    公共函数方法():A {}
    }
    类 ChildProducer 扩展 Producer {
    公共函数方法(): B {}
    }

  • 数组“...$var”内的解包运算符, 允许 定义新数组时执行现有数组的替换;

    $parts = ['苹果', '梨'];
    $fruits = ['香蕉', '橙子', ...$parts, '西瓜'];
    // ['香蕉', '橙子', '苹果', '梨', '西瓜'];

  • 机会 带有数字文字分隔符的大数字的可视化表示 (1_000_000_00);
  • Поддержка 薄弱环节,它允许您保留对对象的引用,但不会阻止垃圾收集器删除关联的对象;
  • 机制 对象序列化(Serialized 和 __sleep()/__wakeup() 的组合),它取代了 Serialized 接口,该接口将被弃用;

    // 返回一个包含对象所有状态的数组;
    公共函数__serialize():数组;

    // 从数组中恢复对象的状态
    公共函数 __unserialize(array $data): void;

  • 允许从方法中抛出异常 __toString();
  • 添加了对预加载目标代码缓存的支持。 添加了设置参数
    opcache.预加载,通过它您可以指定服务器启动时将编译并运行的 PHP 脚本。 该脚本可以通过直接包含或使用 opcache_compile_file() 函数加载其他文件的操作码;

  • 在 Hash 扩展中添加了 crc32c 函数,以使用 Castagnoli 多项式计算校验和;
  • 如果 PHP 是在没有 libargon 的情况下构建的,则在 Sodium 库的实现中添加了对密码哈希方法 argon2i 和 argin2id 的 password_hash() 函数的支持;
  • 添加了函数 mb_str_split(),与 str_split() 类似,但不是对字节进行操作,而是对多字节字符串中的字符位置进行操作;
  • strip_tags() 函数现在能够传递带有标签名称的数组,即现在您可以指定 strip_tags($str, ['a', 'p']); 而不是 strip_tags($str, ' ')
  • proc_open() 允许操作数以数组形式列出,而不是以字符串形式运行,并且还提供线程重定向和对空文件描述符的支持;

    proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);

    // 就像 shell 中的 2>&1
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

    // 就像 shell 中的 2>/dev/null 或 2>nul
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Firebird/Interbase、Recode 和 WDDX 扩展不包含在基本发行版中。 这些扩展现在通过 PECL 分发;
  • 转移到类别 过时的 诸如不带括号的嵌套三元运算符、使用大括号(“$var{$idx}”)访问数组元素和字符串、is_real() 函数以及强制转换为实数、使用没有父类的parent 关键字、参数allow_url_include 配置等功能,在对象上使用 array_key_exists() 。

    函数 get_magic_quotes_gpc()、get_magic_quotes_runtime() 和
    hebrevc()、convert_cyr_string()、money_format()、ezmlm_hash()、restore_include_path()、ldap_control_paged_result_response()、ldap_control_paged_result()、ReflectionType::__toString()。

    当尝试处理函数中的不正确符号时,提供了有关使用过时功能的警告
    base_convert()、bindec()、octdec() 和 hexdec(),以及在 mb_ereg_replace() 中指定非字符串模式时。

来源: opennet.ru

添加评论