为什么这个变量在放入php函数时没有被解析?

时间:2014-03-17 18:01:04

标签: php

此代码显示html表单,但没有由mysql查询生成的值(提交框将为空)。

<?php
function form() {
    echo "<form>
              <form action=\"page.php\" method=\"post\">
              <input type=\"text\" name=\"name\" value=\"$row[column]\">
              <input type=\"submit\">
          </form>";     
}

form();
?>

但是,如果我在函数中时回显以下内容,则会正确回显$ row [column]数组:

<?php
echo "<form>
          <form action=\"page.php\" method=\"post\">
          <input type=\"text\" name=\"name\" value=\"$row[column]\">
          <input type=\"submit\">
      </form>";         
?>

这两个代码是相同的,除了一个在函数中。如何在函数内部回显数组?我做错了什么?

5 个答案:

答案 0 :(得分:4)

您的问题是变量范围之一。 $row存在于全球范围内。从函数内部看,全局范围的可变数据不可用。

以下是进一步阅读的链接 - http://us1.php.net/manual/en/language.variables.scope.php

要解决此问题,您必须使$row可用于该功能。通常有两种方法可以做到这一点。通常首选的方法是将因变量注入函数,方法是将其作为参数传递:

function form($row) {
    // work with $row inside function
}

这被称为&#34;依赖注入&#34;。

第二种方式(真的不应该使用,但我在这里展示它,因为你可能会在现有的代码/代码示例中遇到它)只是使用global关键字来使全局变量可用功能范围:

function form() {
    global $row;
    // work with $row inside function
}

答案 1 :(得分:2)

您必须在函数范围之外的某处定义$ row。试试这个:

<?php
function form( $row ) {
    echo "<form>
              <form action=\"page.php\" method=\"post\">
              <input type=\"text\" name=\"name\" value=\"$row[column]\">
              <input type=\"submit\">
          </form>";     
}

form( $row );
?>

答案 2 :(得分:0)

由于函数内部变量和外部函数之间的范围不同,所以请注意,函数内部的变量与外部不一样,例如:如果在函数外部定义了一个变量,则通过常规方式无法在函数内部访问,相反,你可以使用函数参数。

答案 3 :(得分:0)

为什么不使用此处文档

<?php

function form($value) {
// Do not forget to escape input value
$value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
echo <<<EOD
<form action="page.php" method="post">
<input type="text" name="name" value="{$value}">
<input type="submit">
</form>  
EOD;
}

form($row['column']);

答案 4 :(得分:0)

如果你真的想把变量放在那里你应该使用$GLOBALS,你也应该使用.运算符而不是+来连接字符串,所以它是{{ 1}}。

尽管在函数中使用全局值并非最佳实践方法(至少可以说),尤其是在使用直线打印时 - 请参阅... value=\"" . $GLOBALS['row']['column'] . "\"> ...strip_tags()htmlspecialchars()及其朋友。

您应该使用函数参数,而不是使用全局变量,因此在您的情况下它是:

htmlentities()