【问题标题】:PHP Order of operationsPHP 操作顺序
【发布时间】:2010-03-05 19:33:56
【问题描述】:

我想知道 PHP 将如何执行此操作。操作顺序

addslashes(strip_tags($record['value']));

addslashes 是 first 还是 strip_tags?

也就是说,它是从内向外执行还是从外向内执行?

【问题讨论】:

  • 顺便说一句,一定不能这样。 addlashes 已弃用,不应出现在此位置。
  • 你能再解释一下吗,我不明白你在说什么。谢谢
  • 如果您使用 mysql,则应使用 mysql_real_escape_string() 而不是 addlashes()。此外,它不应在输入验证阶段使用,而应在查询组合中使用。
  • 我没有为 MySQL 使用 addlashes,并且在问题中没有提到使用任何数据库。

标签: php operator-precedence


【解决方案1】:

由内而外。

在 PHP 中传递给函数的东西称为“表达式”。当您将表达式作为参数传递时,您真正传递的是该表达式的值。为了做到这一点,表达式会在传入之前进行评估。

更多关于php manual的表达式。

【讨论】:

  • 我也在寻找这方面的一些文档,有什么吗?顺便说一句:谢谢:)
  • 已编辑以添加更多详细信息和链接。
【解决方案2】:

首先调用strip_tags。

这不仅仅是 PHP 的情况,所有其他编程语言也是如此(不包括一些可能具有独特评估顺序的晦涩深奥的语言)。

PS:这里有一些文档:PEDMAS。这也是编程语言中这种评估顺序的灵感来源。

【讨论】:

    【解决方案3】:

    如果您以一种合乎逻辑的方式考虑它,PHP 需要什么来执行该函数?变量。因此,strip_tags 需要输入 $record['value'] 才能执行函数并从中剥离标签。该函数将返回一个值。

    现在,addslahes 也需要一个变量。它不能在函数上执行,它需要它内部的函数返回一些东西供它处理。因此,它使用来自strip_tags 的返回值作为其变量并在此基础上执行。

    【讨论】:

    • 这是一个示例问题,但是 thnx
    【解决方案4】:

    addslashes 接受一个参数,在您的情况下是strip_tags($record['value'])addslashes 的参数未解析时无法调用。

    因此必须首先调用strip_tags。几乎所有流行的编程语言都是这种情况。不知道你是怎么熬过来的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多