2013-08-05 36 views
0

我對PHP比較陌生,我試圖編寫一個腳本來記錄來自try/catch塊的錯誤。我遇到了一個範圍問題,試圖這樣做。能否在類中調用實例的方法而不重新創建類的範圍內的實例?

首先,我試圖讓類實例成爲一個全局變量,但沒有奏效。

我知道每次'AnotherClass'被調用時都可以創建一個新的實例;然而,這將清除'errorhandler'中的'$ errors'數組。

我一直在這個問題上困了幾個小時,任何幫助將不勝感激!

<?php 

class errorhandler 
{ 
    private $errors = []; 
    function log($e = '') 
    { 
     print "Opps! An error occured: " . $e; 
     array_push($this->errors, $e); 
    } 
} 

# global $errorhandler; # Doesn't work... 
$errorhandler = new errorhandler(); 

class AnotherClass 
{ 
    function __construct() 
    { 
     try { 
      $not_possible = 1/0; 
     } catch (Exception $e) { 
      $errorhandler->log($e); # Doesn't work 
     } 
    } 
} 

new AnotherClass(); 

?> 

謝謝:)

回答

0

你必須在全球$errorhandler變量導入到本地範圍:

class AnotherClass 
{ 
    function __construct() 
    { 
     global $errorhandler; 

     try { 
      $not_possible = 1/0; 
     } catch (Exception $e) { 
      $errorhandler->log($e); # Doesn't work 
     } 
    } 
} 

附:1/0不是一個例外,它是一個運行時錯誤。您無法使用try/catch區塊來識別這些人。

+0

Ohhhh !!!!太簡單了!謝謝!!! – Patrick

+0

但不這樣做。通過構造函數或其他方法將錯誤處理程序注入類。此外,在這個特定的例子中,你應該使用[set_error_handler](http://php.net/manual/en/function.set-error-handler.php) – prodigitalson

+0

好的!不會想到這一點,但這個想法是有道理的 – Patrick

相關問題