PHP全局声明
我正在使用PHP的全局声明来为脚本中的许多函数提供一个数组。该变量在脚本的顶部声明,并在每其中使用它的功能的全球参考,具体如下:PHP全局声明
<?php
$myarray = array(1, 2, 3);
function print_my_array() {
global $myarray;
print '<ul>';
foreach($myarray as $entry) {
print '<li>'.$entry.'</li>';
}
print '</ul>';
return 0;
}
print_my_array();
?>
有时,但并非总是如此,该阵列没有设置当函数被调用,当foreach被调用时产生一个错误。在实际的代码中,所使用的数组具有非常独特的名称,因此不应该与其他任何事件发生冲突。我是否错误地使用全球声明?
不,该代码段是正确的。您遇到的问题是使用全局变量的问题 - 可以从任何地方访问和更改它们(可能是偶然的),从而创建难以发现的错误。
+1传道,兄弟 – 2010-07-09 17:25:41
一般来说,我会同意你的看法,但这个'全局'变量实际上只用于一个场景中的一个脚本。为什么不直接在那里定义呢?它需要在脚本顶部的可见位置进行定义,但它在页面下方以掩埋方式使用。没有机会在其他地方使用或访问它,所以我仍然认为我的问题没有得到答复。 – 2010-07-13 18:59:01
再次,您的代码段是正确的。数组有时可能为null的唯一方法是,如果在定义和对'print_my_array'的任何调用之间发生了某些事情。 – Artefacto 2010-07-13 19:13:22
您最少可以做的是在运行foreach之前检查函数顶部的数组是否为空。至少可以防止错误:
function print_my_array() {
global $myarray;
if(!empty($myarray)) {
print '<ul>';
foreach($myarray as $entry) {
print '<li>'.$entry.'</li>';
}
print '</ul>';
}
}
此外,我不会只是返回0为它的地狱。您可能想要将数组是否为空,并将其从此函数返回。
这是一个明智的做法,但我需要定义该数组才能使脚本的其余部分正常工作。没有定义它不是一个选项。 – 2010-07-13 18:56:56
通过使用全局变量,你可以点击几个陷阱,他们也会让你的代码更少重用。
下面是一个可以在整个站点多次重复使用的函数示例。
(未经测试)
<?php
function arrayTags($items, $open = '<li>', $close = '</li>')
{
if (is_array($items) && count($items) != 0)
{
$output = null;
foreach ($items as $item) {
$output .= $open . $item . $close;
}
return $output;
}
else
{
return '';
}
}
// Default, <li>
echo '<ul>' . arrayTags($myarray) . '</ul>';
// or, spans:
echo '<div id="container">' . arrayTags($myarray, '<span>', '</span>') . '</div>';
$myarray = array(1, 2, 3);
总之你只能这样声明:
$myarray = array();
,如果你想用值来填充它做的是,在类的构造函数:
public function __construct(){
$myarray = array(1,2,3);
}
我不是大师,但在我的经验看来,PHP似乎不喜欢在类内的函数之外执行函数调用。
这不起作用:
class MyClass {
public $mystring = myfunction();
public function myFunction(){
return true; //and your function code
}
}
所以当你使用数组(),它实际上并没有引发任何函数调用,它只是外币类型的数组的空变量。当你使用数组(1,2,3)时,它必须有效地运行“创建数组”,这就像一个函数。
我知道烦人,我希望它有所不同,但我不知道在php中做什么的方式。让我知道如果有一个很好的方式,我很乐意听到它!
我结束了刚刚定义一个返回有问题的数组的函数。这在该函数的范围内保护了数组,但允许我将它定义在我想要的位置。 – 2010-07-13 18:59:58