PHP变量的全局访问

时间:2011-06-09 01:37:44

标签: php

我查看了过去的答案,并且相信在头文件中分配的PHP变量是全局的。我必须 那么做错了。这是我的代码的简化版本:

这是我的myGlobals.php文件:

<?php

  $NAMELABEL = "Name";

?>

这是文件index.php'需要'myGlobals.php然后调用第3个php文件中的函数

<?php

   require_once 'myGlobals.php';
   require_once 'DisplayRecords.php'; 

   displayRecords(); 
?>

这是DisplayRecords.php

<?php

  function displayRecords()
 {
    echo '<table border="1">';
    echo '<tr>';
    echo '<th>' . $NAMELABEL . '</th>';
    echo '</tr>';
    echo "</table>";
  }
?>

这是高度简化的,只是导致错误的代码。

错误消息。我跑的时候得到的是:

  

注意:未定义的变量:NAMELABEL   在   C:\ XAMPP \ htdocs中\ fbreverse \ DisplayRecords.php   第29行

现在,在我更改为全局变量$ NAMELABEL之前 - 我使用了它并且它工作正常:

   echo '<th>Name</th>';

by'fine'我的意思是表格已经创建,并且它有一个名为名称的标题作为列。

注意:允许在上面的html标记周围使用单引号,如果使用双引号字符串则需要使用单引号 在标签中,正如我在echo '<table border="1">'中所做的那样 - 所以我只是坚持并坚持使用单引号。 将上面的示例更改为

 echo "<th>" . $NAMELABEL . "</th>";

零差异,相同的错误信息,注意:未定义的变量:C:\ xampp \ ht中的NAMELABEL ........ blah blah

为什么{_ 1}}在DisplayRecords.php内的函数$NAMELABEL中不可见?

4 个答案:

答案 0 :(得分:4)

您需要在功能的顶部添加...

global $NAMELABEL;

这将使您的函数内部$NAMELABEL可用。

然而,

全球化应该最小化。你可以重新考虑你的代码吗?

答案 1 :(得分:4)

  

我查看过去的答案,并且相信在头文件中分配的PHP变量是全局的。

除非你明确告诉函数将其视为全局函数,否则它们不在函数中,它们不是。

function myFunction() {
  global $myVariable;
}

有关PHP中变量范围的更多详细信息,请参阅http://php.net/manual/en/language.variables.scope.php

作为旁注,你使用它的方式似乎更适合constants,它不需要被声明为全局 - 它们总是全局的。

答案 2 :(得分:2)

因为variables scope。如果您需要将某些内容传递给函数 - 请使用function arguments

其他答案中没有 - global 从不是一个好主意。

答案 3 :(得分:2)

因为在全局范围内声明变量并不意味着它在任何地方都可访问。变量的处理方式与Javascript不同。但是,使用类和OO范例,在类中声明的变量与其他语言(即Java,C#等)的行为相同。这是PHP早期版本的遗迹。

因此,如果$NAMELABEL是常量(非变化变量),则解决方案可能是使用define()

define('NAMELABEL', 'Name');

并在代码中的任何位置使用它:

function displayRecords()
{
   echo '<table border="1">';
   echo '<tr>';
   echo '<th>' . NAMELABEL . '</th>';
   echo '</tr>';
   echo "</table>";
}

但更好的想法是创建一个类并将值存储在其中。例如:

class Labels {
    static public $NAME = "Name";
}

并像这样使用

function displayRecords()
{
   echo '<table border="1">';
   echo '<tr>';
   echo '<th>' . Labels::$NAME . '</th>';
   echo '</tr>';
   echo "</table>";
}