当前位置: 首页 > 面试题库 >

什么时候在php中是邪恶的?

景稳
2023-03-14
问题内容

在我用php开发的所有年份中,我一直都听说使用eval()是邪恶的。

考虑以下代码,使用第二个(更优雅)的选项是否有意义?如果没有,为什么?

// $type is the result of an SQL statement
// e.g. SHOW COLUMNS FROM a_table LIKE 'a_column';
// hence you can be pretty sure about the consistency
// of your string
$type = "enum('a','b','c')";

// possibility one
$type_1 = preg_replace('#^enum\s*\(\s*\'|\'\s*\)\s*$#', '', $type);
$result = preg_split('#\'\s*,\s*\'#', $type_1);

// possibility two
eval('$result = '.preg_replace('#^enum#','array', $type).';');

问题答案:

在将eval()称为纯邪恶时,我会保持谨慎。 动态评估是一个强大的工具,有时可以节省生命。使用eval()可以解决PHP的缺点(请参见下文)。

eval()的主要问题是:

  • 潜在的不安全输入。 传递不受信任的参数是一种失败的方法。确保参数(或其一部分)受到完全信任通常不是一件容易的事。
  • 整。 使用eval()使代码更聪明,因此更难遵循。用布莱恩·科尼根(Brian Kernighan)的话说:“ 调试是一开始编写代码的两倍。因此,如果您尽可能聪明地编写代码,就定义而言,您不够聪明,无法对其进行调试

实际使用eval()的主要问题只有一个:

  • 没有经验的开发人员在没有充分考虑的情况下使用它。

根据经验,我倾向于遵循以下规则:

  1. 有时eval()是唯一/正确的解决方案。
  2. 在大多数情况下,应该尝试其他方法。
  3. 如果不确定,请转到2。
  4. 否则,请 非常非常小心。


 类似资料:
  • 问题内容: 我听说过很多地方,PHP的。根据PHP5.3的LSB和闭包,我们没有理由依赖或。 有 什么 可能的情况是PHP 5.3中最好(唯一?)的答案? 这个问题 不是 关于邪恶是否普遍存在,因为显然不是。 答案摘要: 评估数值表达式(或PHP的其他“安全”子集) 单元测试 交互式PHP“外壳” 可信赖的反序列化 一些模板语言 为管理员和/或黑客创建后门 与<PHP 5.3的兼容性 检查语法(可

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 在这个问题中,有什么方法可以只接受JTextField中的数值吗?答案之一表明JFormattedTextField存在问题。 我还没有使用过它,但是有人可以

  • Lua 是所有脚本语言中最快、最简洁的,我们爱她的快、她的简洁,但是我们也不得不忍受因为这些快、简洁最后带来的一些弊端,我们来挨个数数 module 有多少“邪恶”的吧。 由于 lua_code_cache off 情况下,缓存的代码会伴随请求完结而释放。module 的最大好处缓存这时候是无法发挥的,所以本章的内容都是基于 lua_code_cache on 的情况下。 先看看下面代码: loc

  • 我试图找出为什么使用在python(以及一般编程)中被认为是不好的做法。有人能解释一下吗?更多信息的链接也将不胜感激。

  • 问题内容: Paul Tyma的演讲有以下内容: Executors.newCacheThreadPool邪恶,死死 为什么是邪恶的? 我会冒险猜测:是因为线程数将以无限制的方式增长。因此,如果达到了JVM的最大线程数,被斜线标记的服务器可能会死掉? 问题答案: 问题在于执行器将创建和启动执行执行提交给它的任务所需的尽可能多的线程。尽管可以通过释放完成的线程(阈值是可配置的)来缓解这种情况,但这确

  • 问题内容: 我是一位Java程序员,对公司领域来说是新手。最近,我已经使用Groovy和Java 开发了一个应用程序。我编写的所有代码都使用了大量的静态变量。高级技术人员要求我减少使用的静电数量。我已经在谷歌上搜索了相同的内容,并且发现许多程序员都反对使用静态变量。 我发现静态变量更易于使用。而且我认为它们也是有效的(如果我错了,请纠正我),因为如果我必须对一个类中的一个函数进行10,000次调用