2011-01-23 53 views
0

职能工作,我有一个PHP:与存储阵列

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

在我的代码后

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

我没有得到任何东西,我不能调用一个函数上$err添加和然后检查它?

+1

我建议重构到错误记录类。 – Gazler 2011-01-23 17:27:16

+0

我建议重新命名你的功能。 `displayErr`根本不显示错误。 – 2011-01-23 17:33:31

回答

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); } 
    

此外,print_r()输出的东西由内本身,你不需要echo print_r()

0

$err仅在您的displayErr函数中可用。

您需要添加一个global声明。像这样:displayErr() {global $err; ... }

这被称为变量范围,你可以阅读更多关于它here

0

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

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

[...] 

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

变量$err仅在函数displayErr()内可见。你想要的是访问函数内的全局变量。要做到这一点,你需要使用global关键字将其导入,如下例所示:

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

欲了解更多信息有关变量的作用域,看到这个链接:http://php.net/manual/en/language.variables.scope.php

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();