本文作者:心月

PHP7以上版本被废弃的特性和功能

心月IT博客 2019-11-18
PHP7以上版本被废弃的特性和功能摘要:PHP7 从发布以来都是广受好评,PHP7是PHP脚本语言的重大版本更新,同时将带来大幅的性能改进和新的特性,以及改进一些过时功能。

    PHP7 从发布以来都是广受好评,PHP7是PHP脚本语言的重大版本更新,同时将带来大幅的性能改进和新的特性,以及改进一些过时功能。

    主要的介绍一下PHP7后不支持以及废弃特性

一、PHP 7.1.x 中废弃的特性

1、ext/mcrypt 

        mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。

2、mb_ereg_replace()和mb_eregi_replace()的Eval选项

        对于mb_ereg_replace()和mb_eregi_replace()的 e模式修饰符现在已被废弃。


二、PHP 7.2.x 中废弃的功能

1、不带引号的字符串

        不带引号的字符串是不存在的全局常量,转化成他们自身的字符串。 在以前,该行为会产生 E_NOTICE,但现在会产生 E_WARNING。在下一个 PHP 主版本中,将抛出 Error 异常。

<?php

var_dump(NONEXISTENT);

/* Output:
Warning: Use of undefined constant NONEXISTENT - assumed 'NONEXISTENT' (this will throw an Error in a future version of PHP) in %s on line %d
string(11) "NONEXISTENT"
*/

PHP 7.2.x 中废弃的功能

2、png2wbmp() 和 jpeg2wbmp()

        GD 扩展内的 png2wbmp() 和 jpeg2wbmp() 现已被废弃,将在下一个 PHP 主版本中移除。

3、INTL_IDNA_VARIANT_2003 转化 

        Intl 扩展废弃了 INTL_IDNA_VARIANT_2003 转化,为idn_to_ascii() 和 idn_to_utf8() 的默认选项。 PHP 7.4 会把默认值设置为 INTL_IDNA_VARIANT_UTS46, 并在下一个 PHP 主版本中完全移除 INTL_IDNA_VARIANT_2003。

4、__autoload() 方法

        __autoload() 方法已被废弃, 因为和 spl_autoload_register() 相比功能较差 (因为无法链式处理多个 autoloader), 而且也无法在两种 autoloading 样式中配合使用。

5、track_errors ini 设置和 $php_errormsg 变量

        当开启了 track_errors ini 设置,出现非致命错误时, 会在本地作用域创建 $php_errormsg 变量。 由于提供了更好的方式: error_get_last() 来获取此类错误信息,该功能被废弃。

6、create_function() 函数

        考虑到此函数的安全隐患问题(它是 eval() 的瘦包装器),该过时的函数现在已被废弃。 更好的选择是匿名函数。

7、mbstring.func_overload ini 设置

        由于此设置会影响环境中的字符串系列函数,带来相互操作中的问题,它现在已被废弃。

8、(unset) 类型强制转化

        转化任意表达式为此类型,结果总是 NULL,所以这个多余的类型转化现在也就被废弃了。

9、parse_str() 不加第二个参数

        使用 parse_str() 时,不加第二个参数会导致查询字符串参数导入当前符号表。 考虑到安全隐患问题,不加第二个参数使用 parse_str() 的行为已被废弃。 此函数的第二个选项为必填项,它使查询字符串转为 Array。

10、gmp_random() 函数

        此函数基于未知的、取决于平台的 limb 尺寸产生随机数。因此,该函数已被废弃。 使用更好的方式产生随机数: GMP 扩展中的 gmp_random_bits() 和 gmp_random_range()。

11、each() 函数

        使用此函数遍历时,比普通的 foreach 更慢, 并且给新语法的变化带来实现问题。因此它被废弃了。

12、assert() 一个字符串参数

        assert() 字符串参数将要求它能被 eval() 执行。 考虑到可能被执行远程代码,废弃了字符串的 assert(),最好提供 bool 的表达式。

13、错误处理器内的 $errcontext 参数

        $errcontext 参数包含了错误网站的所有本地变量。 考虑到它很少被用到,而且还会导致内部优化问题,它现在被废弃了。 代替用法:调试器应该自己取回错误站点的本地变量。

14、read_exif_data() 函数

        read_exif_data() 别名已被废弃 使用 exif_read_data() 函数代替。


三、PHP 7.3.x 中废弃的功能

1、PHP 核心中废弃的功能

        ①大小写不敏感的常量

        大小写不敏感的常量声明现已被废弃。将 TRUE 作为第三个参数传递给 define() 将会导致一个废弃警告。大小写不敏感的使用(在读取时使用一个与声明时不同的大小写方式)也已被废弃。

        ②命名空间中的 assert() 

        废弃:在一个命名空间中声明一个名为 assert() 的函数。 assert() 函数属于引擎特殊处理的情况,当在命名空间中使用相同名字去定义 函数时也许会导致不一致的行为。

        ③在字符串中搜索非字符串内容

        废弃:将一个非字符串内容传递给字符串搜索函数。 在将来所有待搜索的内容都将被视为字符串,而不是 ASCII 编码值。如果需要依赖这个特性,你应该 要么显示地进行类型转换(转为字符串),或者显示地调用 chr()。 以下是受到影响的方法:

strpos()
strrpos()
stripos()
strripos()
strstr()
strchr()
strrchr()
stristr()

        ④Strip-Tags Streaming 

        fgetss() 函数和 string.strip_tags stream filter 已经被废弃。这同样影响了 SplFileObject::fgetss() 方法和 gzgetss() 函数。

2、Data Filtering

        对于 FILTER_FLAG_SCHEME_REQUIRED 和 FILTER_FLAG_HOST_REQUIRED 常量的显示使用已被废弃。 总之,FILTER_VALIDATE_URL 已经隐含了这两者。

3、图像处理和 GD 库

        image2wbmp() 已被废弃。

4、国际化相关函数

        如果 PHP 关联的ICU ≥ 56, 那么 Normalizer::NONE 形式的使用将会导致抛出一个废弃警告。

5、多字节字符串

        以下在文档中不存在的 mbereg_*() 别名已被废弃。请使用相应的 mb_ereg_*() 变体替代。

mbregex_encoding()
mbereg()
mberegi()
mbereg_replace()
mberegi_replace()
mbsplit()
mbereg_match()
mbereg_search()
mbereg_search_pos()
mbereg_search_regs()
mbereg_search_init()
mbereg_search_getregs()
mbereg_search_getpos()
mbereg_search_setpos()

6、ODBC 和 DB2 函数 (PDO_ODBC)

        pdo_odbc.db2_instance_name ini 设置项在先前已被废弃。 它在文档中自 PHP 5.1.1 起被废弃。

文章版权及转载声明:

本文由 心月IT技术博客 博主整理于 2019-11-18
若转载请注明原文及出处:https://www.xinyueseo.com/other/510.html

分享到:
赞(
发表评论
快捷输入:

验证码

    评论列表 (有 0 条评论,人围观)参与讨论