2010-07-09 147 views
1

我正在使用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被调用时产生一个错误。在实际的代码中,所使用的数组具有非常独特的名称,因此不应该与其他任何事件发生冲突。我是否错误地使用全球声明?

+0

我结束了刚刚定义一个返回有问题的数组的函数。这在该函数的范围内保护了数组,但允许我将它定义在我想要的位置。 – 2010-07-13 18:59:58

回答

4

不,该代码段是正确的。您遇到的问题是使用全局变量的问题 - 可以从任何地方访问和更改它们(可能是偶然的),从而创建难以发现的错误。

+0

+1传道,兄弟 – 2010-07-09 17:25:41

+0

一般来说,我会同意你的看法,但这个'全局'变量实际上只用于一个场景中的一个脚本。为什么不直接在那里定义呢?它需要在脚本顶部的可见位置进行定义,但它在页面下方以掩埋方式使用。没有机会在其他地方使用或访问它,所以我仍然认为我的问题没有得到答复。 – 2010-07-13 18:59:01

+0

再次,您的代码段是正确的。数组有时可能为null的唯一方法是,如果在定义和对'print_my_array'的任何调用之间发生了某些事情。 – Artefacto 2010-07-13 19:13:22

0

您最少可以做的是在运行foreach之前检查函数顶部的数组是否为空。至少可以防止错误:

function print_my_array() { 
    global $myarray; 

    if(!empty($myarray)) { 
     print '<ul>'; 
     foreach($myarray as $entry) { 
      print '<li>'.$entry.'</li>'; 
     } 
     print '</ul>'; 
    } 
} 

此外,我不会只是返回0为它的地狱。您可能想要将数组是否为空,并将其从此函数返回。

+0

这是一个明智的做法,但我需要定义该数组才能使脚本的其余部分正常工作。没有定义它不是一个选项。 – 2010-07-13 18:56:56

1

通过使用全局变量,你可以点击几个陷阱,他们也会让你的代码更少重用。

下面是一个可以在整个站点多次重复使用的函数示例。

(未经测试)

<?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>'; 
0
$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中做什么的方式。让我知道如果有一个很好的方式,我很乐意听到它!