Tôi đã lấy một lớp từ Exception
, về cơ bản giống như vậy:truy cập vào biến tin từ hàm thành viên trong PHP
class MyException extends Exception {
private $_type;
public function type() {
return $this->_type; //line 74
}
public function __toString() {
include "sometemplate.php";
return "";
}
}
Sau đó, tôi bắt nguồn từ MyException
như vậy:
class SpecialException extends MyException {
private $_type = "superspecial";
}
Nếu tôi throw new SpecialException("bla")
từ một hàm, nắm bắt nó và đi echo $e
, sau đó chức năng __toString
sẽ tải mẫu, hiển thị và sau đó không thực sự trả về bất kỳ điều gì để lặp lại.
này về cơ bản là những gì trong file template
<div class="<?php echo $this->type(); ?>class">
<p> <?php echo $this->message; ?> </p>
</div>
trong tâm trí của tôi, điều này chắc chắn sẽ làm việc. Tuy nhiên, tôi nhận được lỗi sau khi một ngoại lệ được ném và tôi cố gắng để hiển thị nó:
Fatal error: Không thể truy cập tài sản cá nhân SpecialException :: $ _ gõ C: \ path \ to \ trường hợp ngoại lệ. php trên dòng
bất cứ ai có thể giải thích lý do tại sao tôi đang phá vỡ các quy tắc ở đây? Tôi đang làm điều gì đó khủng khiếp dí dỏm với mã này? Có cách nào thành ngữ hơn để xử lý tình huống này không? Điểm của biến số $_type
là (như được hiển thị) mà tôi muốn một lớp div khác nhau được sử dụng tùy thuộc vào loại ngoại lệ bị bắt.
Như tôi đã viết ở dưới đó: Nó là rất rất rất xấu xí để cho __toString() trả về một chuỗi rỗng. Tôi thực sự không thể nhìn thấy BẤT CỨ hệ thống của chúng tôi cho những thứ như vậy. – tuergeist
Sự trở lại trống của __toString() cho một ngoại lệ thậm chí còn nghi ngờ hơn. – tuergeist