__autoload

__autoload 魔术方法,已经被 PHP 5.1 中的 spl_autoload_register 取代,并且在文档中不建议使用。spl_autoloadregister() 的一个主要优点,是能够提供多个组合的自动加载器,从而降低库的互操作性。这两种加载机制是互斥的,使用 \_autoload 的代码不能与使用 spl_autoloadregister 代码交互操作。由于后者更常用,并且也被 Composer 使用,所以 \_autoload() 机制现在仅具有非常有限的适用性。

$php_errormsg

当一个非致命错误被抛出时,如果在 ini 中设置了 track_errors (默认情况下已禁用),并且该错误未被错误处理器程序处理,则会在本地作用域中创建 $php_errormsg 变量。

整个行为非常神奇,除了 ini 相关的部分。error_get_last 函数提供了一种更干净的方式,来检索最后一个错误。PHP 7 还提供了 error_clear_last 函数,覆盖了 $php_errormsg 最后可能的用例,并且没有神奇的作用域操作。

create_function()

create_function() 是对 eval() 的简单包装。此函数可以创建一个函数,函数的参数列表和函数主体作为字符串参数传入。在 PHP 5.3 引入闭包之前,它提供了一种创建近似于 lambda 函数的方法。

由于其操作的性质,create_function() 除了是潜在的安全问题来源之外,还具有非常差的性能和内存使用特性。在各种情况下,使用真正的闭包是首选。

mbstring.func_overload

在 ini 中设置 mbstring.func_overload 将允许用 mbstring 扩展中的相似功能替换掉字符串函数的子集。例如,strlen() 将不再返回以字节为单位的字符串长度,而是根据当前选择的内部编码返回代码点中的长度。

这意味着使用 mbstring.func_overload 的代码,与几乎所有在基本字符串操作正常工作的假设下编写的代码都不兼容。一些库完全禁止 func_overload (例如 Symfony),其它的则会出现一些不可察觉的行为变化。希望支持 func_overload 的代码需要有在普通字符串函数和具有8位编码的 mbstring 函数之间切换的条件(但是,通常只有加密库才会这么做)。

(unset)cast

(unset)cast 转换一个值为 null。

这表示 (unset)expr 只是一个总返回 null 并且没有其它副作用的表达式。除了无用以外,也容易让人懵逼。很多人合理的假设 (unset)$a 的行为类似于 unset($a) ,而实际上没那么回事。

parse_str() 不传入第二个参数

parse_str() 函数用于将查询字符串解析为第二个参数传入的数组,如果没有传入,则解析为本地符号表。

第二种行为是来自 register_globals 黑暗时代的残余。当处理用户提供的数据时,存在严重的安全隐患。

gmp_random()

gmp_random() 函数返回一个 0 到 2**($n*BITS_PER_LIMB)-1 之间的随机 GMP 数,其中 $n 是函数参数,BITS_PER_LIMB 是 GMP/MPIR 实现的平台特定参数,未向用户公开。因此,使用此功能需要猜测 limb 大小,并且有平台依赖性。

作为补救 PHP 5.6 引入了可以精确控制使用的随机数范围的 gmp_random_bits() 和 gmp_random_range() 函数。应始终优先使用这些函数,而不是 gmp_random()。

each()

each() 函数被用于遍历一个数组,类似于 foreach。每次调用时返回一个具有当前 key 和 value 的数组,并将内部数组指针移动到下一个位置。手册中介绍的典型用法如下:

reset($array);

while (list($key, $val) = each($array)) {

echo "$key => $val\n";

}

each() 函数不如 foreach,并且比它慢十倍。

assert() 传入字符参数

assert() 函数具有两种操作模式:如果它传入的不是字符串,它会断言该值是否为真。如果传入一个字符串则先执行 eval(),然后检查 eval() 的结果是否为真。

在 PHP 7 之前,这种行为是阻止断言表达式求值的唯一方法。从 PHP 7 开始,可以在 ini 中设置 zend.assertions 的值,来避免对断言表达式求值。因此,不再需要支持隐式评估的字符串参数。

assert() 的这种行为使得很容易引入微妙的远程代码执行漏洞。

错误处理器的 $errcontext 参数

$errcontext 是使用 set_error_handler() 设置错误处理程序时的最后一个参数。此参数为包含错误生成处的所有局部变量的数组。

这个功能对于优化有影响,因为 $errcontext 可用于修改当前范围中的所有引用和变量。据我所知,这个功能几乎无用,这里的权衡是不值得的。如果人们希望在错误的时候检查变量状态,他们应该使用适当的调试器。

请注意,错误上下文仅包含错误发生处的局部变量。包含 $this 和函数参数的错误回溯,会通过 debug_backtrace() 保持可用。

当传递一个无效参数时,count()函数将抛出warning警告:

在7.2版本中将严格执行类型区分,参数类型不正确,将会出现警告,所以需要在使用count方法时注意参数的值,不过也可以通过自己修改方法来替代(不建议):

function func_new_count($array_or_countable,$mode = COUNT_NORMAL){

if(is_array($array_or_countable) || is_object($array_or_countable)){

return count($array_or_countable, $mode);

}else{

return 0;

}

}

php7.2 的好处,PHP 7.2 中弃用的功能相关推荐

  1. openssl php api,PHP7使用openssl解密易班API中的用户数据

    PHP7使用openssl解密易班API中的用户数据 一.mcrypt扩展解密 自从PHP版本更新到了7.1以上以后,mcrypt扩展被废弃,使用mcrypt扩展会出现如下图的报错.只能使用opens ...

  2. android java 8_四个库,让你在 Android 中启用 Java 8 功能

    Java 8 的推出引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时简化了各种设计模式的实现方式,是 Java 有史以来最重要的更新. 自 Android N 之后,由于 J ...

  3. selenium 示例_Selenium测试中所需的功能和示例

    selenium 示例 所需功能是用于声明一组基本要求(例如浏览器,操作系统,浏览器版本等的组合)的类,以对Web应用程序执行自动跨浏览器测试. 当我们尝试通过Selenium自动化测试来自动化测试脚 ...

  4. 硒测试中所需的功能和示例

    所需功能是用于声明一组基本要求(例如浏览器,操作系统,浏览器版本等的组合)的类,以对Web应用程序执行自动跨浏览器测试. 当我们尝试通过Selenium自动化测试来自动化测试脚本时,我们需要考虑这些组 ...

  5. java改变变量编码方式_Java 8中的5个功能将改变您的编码方式

    java改变变量编码方式 Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能. 尽管最初为该发行版设想的某些功能已扩展到第9版,或已推出第9版,但实际上有数十个新功能. 许多新添加的内容在编 ...

  6. Java 8中的5个功能将改变您的编码方式

    Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能. 虽然最初为该发行版设想的某些功能已扩大范围或已推出到第9版,但实际上有数十个新功能. 许多新添加的内容在编译器,JVM或帮助系统级别都进 ...

  7. SQL Server中的T-SQL元数据功能的完整指南

    In this article, we will demonstrate T-SQL metadata functions available in the SQL Server. 在本文中,我们将演 ...

  8. go interface转int_Go 中 slice 的 In 功能实现探索

    之前在知乎看到一个问题:为什么 Golang 没有像 Python 中 in 一样的功能?于是,搜了下这个问题,发现还是有不少人有这样的疑问. 今天来谈谈这个话题. in 是一个很常用的功能,有些语言 ...

  9. 在Word中使用Quick Parts功能

    从Microsoft Word2007开始加入了一个新的功能Quick Parts,它允许你在Word文档中添加一些事先定义好的文本,这些预定义的文本可以在文档中反复使用从而为你节省许多的时间.例如, ...

最新文章

  1. C语言return函数
  2. WINCC中使用ADO对象连接数据库 例子 常用属性 方法 原创
  3. java程序员需要考证_泄题了!Java程序员最可能被考到的14个面试题
  4. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
  5. java遍历树结构数据_Java数据结构——二叉树的遍历(汇总)
  6. SpringMVC_day1
  7. 中国移动:2016年全力推NFC,以公共交通为突破口
  8. 回顾2020年那些“领域第一本”,每一本都强烈推荐!
  9. maven不引入parent_Maven 如何将本地的项目发布到 Archiva 中
  10. 快进来,详解MySQL游标
  11. 随机效应估算与固定效应估算_混合效应模型和面板数据分析zz Flona
  12. JAVA后台开发提升注解篇 @Deprecated
  13. Windows之API集合
  14. 每日持续签到,累计签到,送积分
  15. 企业数据战略中,什么样的数据才能算是真正的数据资产
  16. 为什么28岁不能学java_28岁大龄人学java不是不可能
  17. 人人转联盟官网?人人转联盟是真的吗?人人转联盟能赚钱吗?
  18. android地图入门,android 百度地图入门01 (史上最详没有之一)
  19. 文本分类实战----数据处理篇----embeddings与vocab中词汇不相覆盖问题的处理办法
  20. .net 导出excel_C# 导出 Excel 的 6 种简单方法!你会几种?

热门文章

  1. HDU1598最小生成树+贪心处理
  2. JAVA 动态代理学习记录
  3. 编译问题收集、汇总与积累
  4. python中类方法与实例方法的区别-Python实例方法、静态方法和类方法详解(包含区别和用法)...
  5. 有没有python与机械结合的工作-Python3从零开始搭建一个语音对话机器人的实现...
  6. python代码基础题-python第一部分基础题1-80题
  7. 财务大数据比赛有python吗-Python去做大数据开发,真的有前景吗?
  8. python3.7.2安装-最新Centos7安装python3并与python2共存
  9. vscode使用教程python-教你正确使用VSCode写Python
  10. python自学视频-师傅带徒弟学Python:第一篇Python基础视频课程