Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

accessing private variable from member function in PHP

Tags:

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.

like image 462
Carson Myers Avatar asked Nov 19 '09 09:11

Carson Myers


1 Answers

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]; } 
like image 124
Fivell Avatar answered Sep 20 '22 22:09

Fivell