2013-08-05 7 views
0

Я относительно новичок в PHP, я пытаюсь сделать скрипт для регистрации ошибок из блоков try/catch. Я столкнулся с проблемой области, пытающейся это сделать.Можно ли вызвать метод экземпляра внутри класса без повторного создания экземпляра внутри области?

Во-первых, я попытался сделать экземпляр класса глобальной переменной, но это не сработало.

Я знаю, что каждый раз, когда вызывается «AnotherClass», можно создавать новый экземпляр; однако это позволит очистить массив «$ 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 
     } 
    } 
} 

P.S.1/0 не является исключением, это ошибка времени выполнения. Вы не можете поймать их с помощью блока try/catch.

+0

Ohhhh !!!! Это так просто! Спасибо!!! – Patrick

+0

Но НЕ ДОЛЖНО это сделать. Внесите обработчик ошибок в класс через конструктор или какой-либо другой метод. Кроме того, в этом конкретном случае вы должны использовать [set_error_handler] (http://php.net/manual/en/function.set-error-handler.php) – prodigitalson

+0

Хорошо! Не думал бы об этом, но эта идея имеет смысл – Patrick

Смежные вопросы