Why do I have to declare __set if I declare __get for read-only properties?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Howdy,

I'd like to access some of the private members of my classes as read-only properties without resorting to function calls to access them. (e.g. $testClass->privateMember instead of $testClass->privateMember(), etc)

Based on my research and testing, using the __get and __set overloading methods appears to be the only way to do so. It also, based on testing, appears that these private members must be in an array.

What I do not understand is that if I declare a __get method I MUST also declare a "do nothing" __set method to prevent the read-only properties from being modified in code that uses the class.

For example, the code below allows me to have read-only properties. However, if I remove the "do nothing" __set method completely, then the properties are no longer read-only.

I'm curious as to why I HAVE to implement the __set method?

Example:

<?php

class testClass
{
   private $varArray = array('one'=>'ONE', 'two'=>'TWO');

   public function __get($name)
   {
       if (array_key_exists($name, $this->varArray)) {
           return $this->varArray[$name];
       }
   }

   public function __set($name, $value)
   {
   }

}

$test = new testClass();

$test->one = 'TWO';   // doesn't work
echo $test->one;      // echo s 'ONE'

?>

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux