phpreadonlymember-variables

How to implement a read-only member variable in PHP?


When trying to change it,throw an exception.


Solution

  • I suppose a solution, for class properties, would be to :

    For variables, I don't think it's possible to have a read-only variable for which PHP will throw an exception when you're trying to write to it.


    For instance, consider this little class :

    class MyClass {
        protected $_data = array(
            'myVar' => 'test'
        );
    
        public function __get($name) {
            if (isset($this->_data[$name])) {
                return $this->_data[$name];
            } else {
                // non-existant property
                // => up to you to decide what to do
            }
        }
    
        public function __set($name, $value) {
            if ($name === 'myVar') {
                throw new Exception("not allowed : $name");
            } else {
                // => up to you to decide what to do
            }
        }
    }
    

    Instanciating the class and trying to read the property :

    $a = new MyClass();
    echo $a->myVar . '<br />';
    

    Will get you the expected output :

    test
    

    While trying to write to the property :

    $a->myVar = 10;
    

    Will get you an Exception :

    Exception: not allowed : myVar in /.../temp.php on line 19