[英]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.