accessing private variable from member function in PHP

Posted by Carson Myers on Stack Overflow See other posts from Stack Overflow or by Carson Myers
Published on 2009-11-19T09:53:19Z Indexed on 2010/03/15 15:59 UTC
Read the original article Hit count: 239

Filed under:
|
|

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.

© Stack Overflow or respective owner

Related posts about php

Related posts about exceptions