PHP全球声明

时间:2010-07-09 16:37:05

标签: php

我正在使用PHP的全局声明来为脚本中的许多函数提供一个数组。变量在脚本的顶部声明,并在每个使用它的函数中用global引用,如下所示:

<?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时生成错误。在实际代码中,使用的数组具有非常唯一的名称,因此不应该与其他任何内容发生任何冲突。我是否误用全球声明?

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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>';

答案 2 :(得分:0)

在运行foreach之前,至少可以检查函数顶部的数组是否为null。这至少可以防止错误:

function print_my_array() {
    global $myarray;

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

另外,我不会因为它的地狱而返回0。您可能希望将此数组中的数组是否为空而合并。

答案 3 :(得分: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
    }
}

所以当你使用array()它实际上并没有触发任何函数调用时,它只是创建一个类型为array的空变量。当你使用数组(1,2,3)时,它必须有效地运行'create array',就像一个函数。

我知道很讨厌,我希望它有所不同,但我不知道在php中做你想做的事情。让我知道,如果有一种很好的方式,我很乐意听到它!