Php 什么';有什么区别?eval()还是直接调用函数?

Php 什么';有什么区别?eval()还是直接调用函数?,php,eval,Php,Eval,我不是php专家,我不知道a和b之间的区别(1) a、 )eval('return')。base64_解码(“编码的文本”)。“;”) b、 )base64解码(“编码文本”) -我认为,a是php代码,b只是字符串。我的另一个问题是: c和d之间的区别(2)是什么 c、 )eval('return')。base64_解码(“编码的文本”)。“;”) d、 )eval(base64解码(“编码文本”) 所以我有两个问题。谁能回答/帮助 谢谢。编辑:哎呀,第二个问题读错了 对于第一个问题:在一种情

我不是php专家,我不知道a和b之间的区别(1)

a、 )
eval('return')。base64_解码(“编码的文本”)。“;”)

b、 )
base64解码(“编码文本”)

-我认为,a是php代码,b只是字符串。我的另一个问题是:

c和d之间的区别(2)是什么

c、 )
eval('return')。base64_解码(“编码的文本”)。“;”)

d、 )
eval(base64解码(“编码文本”)

所以我有两个问题。谁能回答/帮助

谢谢。

编辑:哎呀,第二个问题读错了

对于第一个问题:在一种情况下,
eval()
被无缘无故地使用
eval()
只有在出于某种原因将某些PHP代码动态构建为字符串时才是必需的,并且应该非常非常小心地使用。作为直接调用函数的替代方法,它当然不是必需的

至于第二个问题,区别在于要计算哪个字符串。案例(c)将返回base-64解码“编码文本”的结果。也就是说,它将返回一个解码版本。案例(d)将首先解码文本,然后尝试将其作为PHP代码执行。所以(d)实际执行解码结果,(c)不执行,它只返回解码文本。

编辑:哇,第二个问题读错了

对于第一个问题:在一种情况下,
eval()
被无缘无故地使用
eval()
只有在出于某种原因将某些PHP代码动态构建为字符串时才是必需的,并且应该非常非常小心地使用。作为直接调用函数的替代方法,它当然不是必需的


至于第二个问题,区别在于要计算哪个字符串。案例(c)将返回base-64解码“编码文本”的结果。也就是说,它将返回一个解码版本。案例(d)将首先解码文本,然后尝试将其作为PHP代码执行。所以(d)实际执行解码结果,(c)不执行,它只返回解码文本。

忘记eval,在这个阶段尽量不要使用。 你应该问问他们之间有什么区别

$var = base64_decode("encoded_text")

正如查德所写,尽量避免使用eval!它只执行$variable中的代码。例如

$var = 'base64_decode("encoded_text")';
return eval($var);

忘记eval,在这个阶段尽量不要使用。 你应该问问他们之间有什么区别

$var = base64_decode("encoded_text")

正如查德所写,尽量避免使用eval!它只执行$variable中的代码。例如

$var = 'base64_decode("encoded_text")';
return eval($var);

让我们将您的两个案例分别标记为案例X(a部分和b部分)和案例Y(c部分和d部分)

案例十 因此,这两个部分彼此没有区别。事实上,a部分有一些冗余

如果您缓慢地评估它们,您会注意到它是多么冗余:

a部分
在这一部分中,不同之处在于您在字符串中添加了
eval
语句和
return
,以进行求值

  • echo eval('return')。base64_解码(“编码的_文本”)。“;”
  • echo eval('return“decoded_text”)”
  • echo“解码文本”
  • 乙部

  • echo base64_解码(“编码的_文本”)
  • echo“解码文本”
  • 案例Y 对于这一点,有很大的不同

    丙部

  • echo eval('return')。base64_解码(“编码的_文本”)。“;”
  • echo eval('return“decoded_text”)”
  • echo“解码文本”
  • d部分

  • echo eval(base64解码(“编码文本”)
  • echo eval(“解码文本”)-此处可能存在语法错误,因为
    解码的\u文本
    可能是正确的PHP代码,也可能不是正确的PHP代码

  • 让我们将您的两个案例分别标记为案例X(a部分和b部分)和案例Y(c部分和d部分)

    案例十 因此,这两个部分彼此没有区别。事实上,a部分有一些冗余

    如果您缓慢地评估它们,您会注意到它是多么冗余:

    a部分
    在这一部分中,不同之处在于您在字符串中添加了
    eval
    语句和
    return
    ,以进行求值

  • echo eval('return')。base64_解码(“编码的_文本”)。“;”
  • echo eval('return“decoded_text”)”
  • echo“解码文本”
  • 乙部

  • echo base64_解码(“编码的_文本”)
  • echo“解码文本”
  • 案例Y 对于这一点,有很大的不同

    丙部

  • echo eval('return')。base64_解码(“编码的_文本”)。“;”
  • echo eval('return“decoded_text”)”
  • echo“解码文本”
  • d部分

  • echo eval(base64解码(“编码文本”)
  • echo eval(“解码文本”)-此处可能存在语法错误,因为
    解码的\u文本
    可能是正确的PHP代码,也可能不是正确的PHP代码

  • 在a-2部分:回声评估(“返回“解码文本”);:这是否等于->回显“解码文本”?有一个eval函数。这是如何产生相同的结果的?你能告诉我吗?因为我不知道。我对每个部分所做的是向你展示当慢慢分解时,评估是怎样的。所以a-1和a-2部分是一样的。不,我说的是a-2和a-3。是一样的吗?是的。a-2在a-2部分计算为a-3:echo eval('返回“解码文本”);:这是否等于->回显“解码文本”?有一个eval函数。这是如何产生相同的结果的?你能告诉我吗?因为我不知道。我对每个部分所做的是向你展示当慢慢分解时,评估是怎样的。所以a-1和a-2部分是一样的。不,我说的是a-2和a-3。是一样的吗?是的。a-2评估为a-3