I have derived a class from Exception
, basically like so:
class MyException extends Exception { private $_type; public function type() { return $this->_type; //line 74 } public function __toString() { include "sometemplate.php"; return ""; } }
Then, I derived from MyException
like so:
class SpecialException extends MyException { private $_type = "superspecial"; }
If I throw new SpecialException("bla")
from a function, catch it, and go echo $e
, then the __toString
function should load a template, display that, and then not actually return anything to echo.
This is basically what's in the template file
<div class="<?php echo $this->type(); ?>class"> <p> <?php echo $this->message; ?> </p> </div>
in my mind, this should definitely work. However, I get the following error when an exception is thrown and I try to display it:
Fatal error: Cannot access private property SpecialException::$_type in C:\path\to\exceptions.php on line 74
Can anyone explain why I am breaking the rules here? Am I doing something horribly witty with this code? Is there a much more idiomatic way to handle this situation? The point of the $_type
variable is (as shown) that I want a different div class to be used depending on the type of exception caught.
just an example how to access private property
<?php class foo { private $bar = 'secret'; } $obj = new foo; if (version_compare(PHP_VERSION, '5.3.0') >= 0) { $myClassReflection = new ReflectionClass(get_class($obj)); $secret = $myClassReflection->getProperty('bar'); $secret->setAccessible(true); echo $secret->getValue($obj); } else { $propname="\0foo\0bar"; $a = (array) $obj; echo $a[$propname]; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With