【问题标题】:Is there another way to assign PHP variables that I don't know about?还有另一种方法来分配我不知道的 PHP 变量吗?
【发布时间】:2012-03-12 03:45:55
【问题描述】:

我正在调试一些让我难过的客户端 PHP 代码。正如这个伪示例所示,在表单提交的接收端有代码处理表单值,但没有明显地分配这些值:

(在提交表单时,表单包含“名称”和“职位”字段):

echo "The name is = ". $name;
echo "The position is = ". $position;

此代码是大型应用程序的一部分,在此之前会调用其他文件中的代码。但关键是,如果我在整个代码库中搜索 '$name = ',它永远不会出现。那么请求变量怎么可能被分配给$name?除了$var = value,还有其他方法可以为PHP other中的变量赋值吗??

我唯一的另一个线索是这个项目使用了 Smarty,我对此一无所知。

【问题讨论】:

    标签: php smarty variable-assignment


    【解决方案1】:

    可能是创建代码的人正在使用register_globals 的服务器上工作。例如,它的作用是创建常规全局变量作为表单提交的结果,而不是填充 $_POST 或 $_GET 数组。

    【讨论】:

    • 谢谢它的 mequinn、Jasmo 和 JacobM- 我刚刚接受了教育
    【解决方案2】:

    如果register_globals 指令已在 php.ini 中设置为 true,则所有 POST 属性也将按照您描述的方式显示为单独的变量。请注意,此指令默认为 false,并且不推荐使用此指令。

    【讨论】:

      【解决方案3】:

      当您查看smarty documentation 时,您可以看到变量是这样分配的(从链接页面复制):

      <?php
      
      $smarty = new Smarty();
      
      $smarty->assign('firstname', 'Doug');
      $smarty->assign('lastname', 'Evans');
      $smarty->assign('meetingPlace', 'New York');
      
      $smarty->display('index.tpl');
      
      ?>
      

      【讨论】:

      • +1 用于提及 Smarty(即使可能不正确);但是,这不只影响tpl模板文件中可用的变量吗?
      • 我不确定,我从未真正使用过 smarty,但我认为它使用某种方法将变量分配给视图,例如 assign()。我只是想提示一下在代码中还要寻找什么
      • @Yarin 不,分配变量应该在您的 .php 文件中进行(控制器将数据传递给视图)。在 .tpl 文件中,您可以像这样访问这些变量:Hello {$firstname} {$lastname}, glad to see you can make it.(再次取自文档)
      • 罗杰,这不是最终的罪魁祸首,但很高兴知道。
      【解决方案4】:

      技术上是的。

      $x = 'name';
      $$x = 'harry';
      echo 'Yer a wizard '.$name;
      

      (如果是这个原因我会很惊讶)

      【讨论】:

      • 但是在所有源代码页面中快速搜索“位置”应该会显示出这种情况的证据。 'name' 可能太常见而无法搜索,但搜索 'position' 看看会出现什么。让我们知道是否发生了这种情况!
      【解决方案5】:

      我猜你的服务器有 register_globals 设置,它会自动从发布的项目中生成变量:

      $_POST['foo'] === $foo
      

      【讨论】:

        【解决方案6】:

        也许这是register_globals 疾病的又一次爆发?

        这被认为已经消失了,但一次又一次地浮出水面!

        【讨论】:

          【解决方案7】:

          在我看来,有人将这些变量包括在内是为了用它们做更多的事情,但从未有时间这样做。除非包含 php 页面正在为这些变量赋值,否则不会有任何内容。

          【讨论】:

            【解决方案8】:

            尝试提高错误报告级别,如果这些变量正在使用但尚未初始化,则会显示警告

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-12-24
              • 2020-07-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-08-03
              • 2018-05-12
              • 2013-04-04
              相关资源
              最近更新 更多