PHP:使用存储数组的函数

时间:2011-01-23 17:20:59

标签: php arrays

我有一个

function displayErr(){
    $err[] = "You have an error";
}

稍后在我的代码中

if($bla==false) { displayErr(); }
if(!empty($err)) { echo print_r($err); }

我没有得到任何东西,我不能调用添加$err然后再检查的函数吗?

5 个答案:

答案 0 :(得分:2)

变量$err仅在函数displayErr()中可见。你想要的是访问函数内的全局变量。为此,您需要使用global关键字导入它,如下例所示:

function displayErr(){
    global $err;
    $err[] = "You have an error";
}

有关变量范围的更多信息,请参阅以下链接:http://php.net/manual/en/language.variables.scope.php

答案 1 :(得分:1)

$err仅在displayErr()函数的范围内可见。你需要传递它或它的值。有两种选择:

  1. 返回错误消息并附加到调用范围内的$err

    function displayErr() {
        return "You have an error";
    }
    
    $err = array();
    if($bla==false) { $err[] = displayErr(); }
    if(!empty($err)) { print_r($err); }
    
  2. 使用global

    function displayErr() {
        global $err;
        $err[] = "You have an error";
    }
    
    $err = array();
    if($bla==false) { displayErr(); }
    if(!empty($err)) { print_r($err); }
    
  3. 此外,print_r()单独输出内容,您不需要echo print_r()

答案 2 :(得分:0)

$err仅适用于您的displayErr功能。

您需要添加global语句。像这样:displayErr() {global $err; ... }

这称为变量范围,您可以阅读更多相关信息here

答案 3 :(得分:0)

您可以使用global关键字将变量存储为全局:

function displayErr()
{ 
global $err;
$err = "You have an error"; 
}

[...]

global $err;
if($bla==false) { displayErr(); } if(!empty($err)) { echo print_r($err); }

答案 4 :(得分:0)

一个简单的错误处理类示例:

class ErrorHandler()
{
    private $errors = array();

    public function add_error($error = 'You have an error')
    {
        $this->errors[] = $error;
    }

    public function get_errors()
    {
        return $this->errors;
    }

    public function print_errors()
    {
        print_r($this->errors);
    }
}

$errorhandler = new ErrorHandler;
if($bla==false) $errorhandler->add_error('Variable bla is not set!');
if($bla=='unknown error') $errorhandler->add_error();

$errors = $errorhandler->get_errors();
if($errors) print_r($errors); // or
if($errors) $errorhandler->print_errors();