繁体   English   中英

PHP vars的全局访问

[英]Global access of PHP vars

我查看了过去的答案,并被引导相信 header 文件中分配的 PHP 变量是全局变量。 那我一定是做错了什么。 这是我的代码的简化版本:

这是我的 myGlobals.php 文件:

<?php

  $NAMELABEL = "Name";

?>

This is file index.php that 'requires' myGlobals.php then calls a function in a 3rd php file

<?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>";
  }
?>

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

错误消息。 我运行时得到的是:

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

现在,在我更改为全局变量 $NAMELABEL 之前——我使用了它并且它运行良好:

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

“很好”是指该表已创建并且它有一个名为“名称”的 header 列。

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

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

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

为什么$NAMELABEL在 DisplayRecords.php 内的 function displayRecords()中不可见?

您需要在 function 的顶部添加...

global $NAMELABEL;

这将使$NAMELABEL在 function 中可用。

然而,应该尽量减少全局变量。 你能重构你的代码吗?

我查看了过去的答案,并被引导相信 header 文件中分配的 PHP 变量是全局变量。

不在函数内,它们不在,除非您明确告诉 function 将其视为全局。

function myFunction() {
  global $myVariable;
}

See http://php.net/manual/en/language.variables.scope.php for more details on variable scope in PHP.

作为旁注,您使用它的方式似乎更适合于constants ,不需要将其声明为全局 - 它们始终是全局的。

由于变量 scope 如果您需要将某些内容传递到 function - 使用function arguments

并且 no - global在其他答案中从来都不是一个好主意。

因为在全局scope 中声明了一个变量,并不意味着它可以在任何地方访问。 变量的处理方式与 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 并将值存储在其中。 例如:

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

并像这样使用它

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM