不在php中重新声明变量

时间:2017-06-08 06:02:52

标签: php mysql

我遇到了问题,我的变量$ x没有重新声明为" english"。问题出在哪儿?非常感谢:

<?php
// assign language or default english
$x = $lang_detected;
$language_table = '
<form id="lang_detected" method="post" 
  action="' . htmlspecialchars($_SERVER["PHP_SELF"]) . '">
  <input type="button" value="' . $x . '" onclick = "displayLangList()" style="width:200px;display:block;margin:auto;" />
  <input type="submit" value="ok" />
</form>';

$possible_lang = mysqli_query($con, 
'SELECT name2 FROM page WHERE name2 = "' . $lang_detected . '"');

if (mysqli_num_rows($possible_lang) > 0 ) {
  echo $language_table;
} else {
  $x = 'english';
  echo $language_table;
}  
?>

即使我这样做:

if (mysqli_num_rows($possible_lang) > 0 ) {
  $x = "bla bla";
  echo $language_table;
} else {
  $x = 'english';
  echo $language_table;
}  

$ x仍保留值:

$x = $lang_detected;

非常感谢!

2 个答案:

答案 0 :(得分:2)

使用其他变量构造变量时,这些值将按原样在该精确时刻进行烘焙。除了将其包装到函数中之外,没有办法推迟评估。

那是:

$x = 'a';
$y = '(' . $x . ')';
$x = 'b';

在这种情况下,即使$y发生了更改,(a)仍然是$x。没有任何约束力。

在您的代码中,您始终可以移动该内容并避免重复:

if (mysqli_num_rows($possible_lang) > 0 ) {
  $x = "bla bla";
} else {
  $x = 'english';
}

echo '<form ...language table'.$x.'...';

答案 1 :(得分:0)

要解决您的问题,您可以使用一个功能。

<?php
// assign language or default english
$x = $lang_detected;

$possible_lang = mysqli_query($con, 
'SELECT name2 FROM page WHERE name2 = "' . $lang_detected . '"');

if (mysqli_num_rows($possible_lang) > 0 ) {
  echo getLanguageTable($x);
} else {
  $x = 'english';
  echo getLanguageTable($x);
}

function getLanguageTable($x) {
    return '
    <form id="lang_detected" method="post" 
      action="' . htmlspecialchars($_SERVER["PHP_SELF"]) . '">
      <input type="button" value="' . $x . '" onclick = "displayLangList()" style="width:200px;display:block;margin:auto;" />
      <input type="submit" value="ok" />
    </form>';

}