職能工作,我有一個PHP:與存儲陣列
function displayErr(){
$err[] = "You have an error";
}
在我的代碼後
if($bla==false) { displayErr(); }
if(!empty($err)) { echo print_r($err); }
我沒有得到任何東西,我不能調用一個函數上$err
添加和然後檢查它?
職能工作,我有一個PHP:與存儲陣列
function displayErr(){
$err[] = "You have an error";
}
在我的代碼後
if($bla==false) { displayErr(); }
if(!empty($err)) { echo print_r($err); }
我沒有得到任何東西,我不能調用一個函數上$err
添加和然後檢查它?
$err
只在您的displayErr()
功能的範圍可見。你需要通過它,或者它的值,左右。一對夫婦的選擇:
返回錯誤信息,並追加到$err
呼叫範圍內
function displayErr() {
return "You have an error";
}
$err = array();
if($bla==false) { $err[] = displayErr(); }
if(!empty($err)) { print_r($err); }
使用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()
。
$err
僅在您的displayErr
函數中可用。
您需要添加一個global
聲明。像這樣:displayErr() {global $err; ... }
這被稱爲變量範圍,你可以閱讀更多關於它here。
可以使用global
關鍵字您的變量存儲爲全球:
function displayErr()
{
global $err;
$err = "You have an error";
}
[...]
global $err;
if($bla==false) { displayErr(); } if(!empty($err)) { echo print_r($err); }
變量$err
僅在函數displayErr()
內可見。你想要的是訪問函數內的全局變量。要做到這一點,你需要使用global
關鍵字將其導入,如下例所示:
function displayErr(){
global $err;
$err[] = "You have an error";
}
欲瞭解更多信息有關變量的作用域,看到這個鏈接:http://php.net/manual/en/language.variables.scope.php
一個簡單的錯誤處理類的例子:
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();
我建議重構到錯誤記錄類。 – Gazler 2011-01-23 17:27:16
我建議重新命名你的功能。 `displayErr`根本不顯示錯誤。 – 2011-01-23 17:33:31