PHP bir custom error handler kullanırsanız, bir hata bağlam (oluştuğu yerde tüm değişkenlerin değeri) görebilirsiniz. Istisnalar için bunu yapmak için herhangi bir yolu var mı? Ben bir istisna işleyici ayarı değil, içerik almak demek.
PHP bir custom error handler kullanırsanız, bir hata bağlam (oluştuğu yerde tüm değişkenlerin değeri) görebilirsiniz. Istisnalar için bunu yapmak için herhangi bir yolu var mı? Ben bir istisna işleyici ayarı değil, içerik almak demek.
You can attach the context to your exception manually. I have never tried it, but it would be interesting to create a custom exception that in the constructor calls and saves get_defined_vars()
for later retrieval.
This will be a heavy exception :-)
proof of concept:
class MyException extends Exception() {
protected $throwState;
function __construct() {
$this->throwState = get_defined_vars();
parent::__construct();
}
function getState() {
return $this->throwState;
}
}
daha iyi:
class MyException extends Exception implements IStatefullException() {
protected $throwState;
function __construct() {
$this->throwState = get_defined_vars();
parent::__construct();
}
function getState() {
return $this->throwState;
}
function setState($state) {
$this->throwState = $state;
return $this;
}
}
interface IStatefullException { function getState();
function setState(array $state); }
$exception = new MyException();
throw $exception->setState(get_defined_vars());
PHP İstisnalar:
http://www.php.net/manual/en/language.exceptions.extending.php
Temel durum sınıfı yöntemleri:
final public function getMessage(); // message of exception
final public function getCode(); // code of exception
final public function getFile(); // source filename
final public function getLine(); // source line
final public function getTrace(); // an array of the backtrace()
final public function getPrevious(); // previous exception
final public function getTraceAsString(); // formatted string of trace
Yani, bu temel bir durum yakalandı eğer çalışmak zorunda budur. Eğer o zaman bunu yakalamak zaman gitti atıldı hangi bağlam olarak daha fazla içerik almak konusunda yapılması gereken çok şey değil durum oluşturur kod üzerinde kontrole sahip değilseniz. Eğer istisna kendiniz üretiyorsanız, bu atılmış bulunuyor önce sonra istisna bağlamı ekleyebilirsiniz.
Ayrıca yapamadık:
class ContextException extends Exception {
public $context;
public function __construct($message = null, $code = 0, Exception $previous = null, $context=null) {
parent::__construct($message, $code, $previous);
$this->context = $context;
}
public function getContext() {
return $this->context;
}
}
Bu durum örneğini ve sonra atmak ihtiyacını önleyeceğini.