Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么情况需要使用eval(),因为没有其他选择?_Php_Performance_Eval - Fatal编程技术网

Php 什么情况需要使用eval(),因为没有其他选择?

Php 什么情况需要使用eval(),因为没有其他选择?,php,performance,eval,Php,Performance,Eval,我知道,出于速度和安全考虑,JavaScript中应该避免使用eval。但是在PHP的例子中,很少提到安全性。更常见的情况是,由于随意使用eval,您的程序运行速度比应该的慢 在什么特定情况下,您应该使用eval,因为没有其他解决方法 为清楚起见: 我们不是在讨论用户提供的数据。因此,问题集中在纯粹且完全受控的服务器端有效使用eval 我知道应该避免使用eval javascript的速度和安全性 原因。但是在php的例子中, 很少有人提到安全问题。 更多的时候是你的程序在运行 速度比应该的慢,

我知道,出于速度和安全考虑,JavaScript中应该避免使用
eval
。但是在PHP的例子中,很少提到安全性。更常见的情况是,由于随意使用
eval
,您的程序运行速度比应该的慢

在什么特定情况下,您应该使用
eval
,因为没有其他解决方法

为清楚起见:

我们不是在讨论用户提供的数据。因此,问题集中在纯粹且完全受控的服务器端有效使用
eval

我知道应该避免使用eval javascript的速度和安全性 原因。但是在php的例子中, 很少有人提到安全问题。 更多的时候是你的程序在运行 速度比应该的慢,因为 随意使用eval

eval
在php中也是

在什么具体情况下你应该 使用eval(),因为没有其他 绕道而行

首先,我们尽量避免使用它,但是如果您必须使用它来执行某些代码,那么您将不得不使用它,但正如所说的,它是邪恶的,您使用它的风险由您自己承担

底线:


无论如何,绝不允许使用
eval
运行用户输入(除非您知道自己在做什么/冒什么风险)

使用
eval
-在PHP中使用eval评估代码的安全性问题与在Javascript中相同:如果您评估某些代码,您必须确定它来自何处以及它包含什么

安全隐患可能更大,因为PHP可以访问您的数据库(除其他外)——这意味着它可以用来窃取/破坏您的应用程序所依赖的几乎所有信息

在Javascript中,他们说“eval是邪恶的”;PHP中的情况可能与Javascript中的情况一样


现在,关于无法避免使用
eval
的特定情况。。。好吧,在我的日常工作中,用PHP开发了大约4年,我不记得在我自己的代码中使用过
eval
^^


尽管如此,您需要
eval
的情况的例子是,例如,当您在数据库中存储一些代码,而不是将其缓存在文件(可以包括在内)中时——这发生在一些允许在管理部分键入部分PHP代码的CMS上,例如。

我完全同意前面的答案,即eval是邪恶的,我从不在我的代码中使用它

但有一种情况下,我没能避免eval。我在php方面没有太多经验,所以如果有人建议我如何在没有“eval”的情况下重写代码,我会很高兴。在这种情况下,我将一个类名存储在一个变量中,我必须对该类调用一个静态方法,类名来自一个可信的源。所以我不得不写这样的东西:

eval("\$result = $className::methodName()");

(因为您不能只写$className::methodName())

如果希望使用PHP5.3之前的匿名函数,则需要使用,它封装了eval()调用。

eval和create_函数可能允许任意代码注入。PHP中有很多东西可以用来危害应用程序的安全性

我们告诉孩子们不要玩刀子和火柴,但如果使用得当,这些工具是有用的(如果不是必要的话)。因此,它具有很多PHP功能。只要您确切地了解自己在做什么,使用功能就没有本质上的错误

但是,在这样一个抽象层次上讨论编程语言并不是StackOverflow的目的


C.

OP没有说是用户提供的数据,这篇文章(非常简短)的论点就是基于这些数据。他问是否存在使用它的有效情况。显然,在用户提供的ata上使用
eval
是无效的,但这并不能真正回答问题。@Crowder:他说“我知道出于速度和安全原因,javascript中应该避免eval。但在php中,很少提到安全性。”假设在php中没有提到它是邪恶的:)我还讨论了情况/用法部分。谢谢你完全同意。与js eval相比,我会更小心地使用PHP eval,我想不起我需要它的地方了。+1我想说,由于磁盘、数据库和任意网络访问,PHP中的PHP肯定比JavaScript中的更糟糕。
call_user_func(array($className,'methodName'))
call_user_func($className::methodName”)
,根据您的PHP.call_user_func(array($className,$methodName))版本而定;应该有用。编辑:konforce比我先进来:)安全性也有同样的问题,但性能更好。。。不知道为什么我没有想到使用它)