Carson Myers Carson Myers - 29 days ago 12
PHP Question

accessing private variable from member function in PHP

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.

Answer

Name the variable protected:

* Public: anyone either inside the class or outside can access them
* Private: only the specified class can access them. Even subclasses will be denied access.
* Protected: only the specified class and subclasses can access them
Comments