2011-01-23 52 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();