My idea is just  your answer...happy..ing  ^_^ 

You are so warmhearted.  Thanks a lot!  : )

I will never post a question to a existing thread .

> -----Original Message-----
> From: Jochem Maas [mailto:[EMAIL PROTECTED] 
> Sent: Friday, December 21, 2007 9:11 AM
> To: ked
> Cc: php-general@lists.php.net
> Subject: Re: [PHP] about __get,__set Overloading, read-only properties
> 
> pleae don't reply to an existing thread when posting a new question.
> 
> ked schreef:
> > Hi. all ,
> > 
> > I got a article from php 5.0 manual's comments. It's useful, offer 
> > readonly properties for classes.
> > 
> > (look at the end of this message for  the article )
> > 
> > find out  function __construct(), I want to modify 
> $this->id in it , 
> > then I got a  "readonly" Exception (defined in "__set" function).
> > 
> > Distinctly, a read-only property could not be change via 
> > "$obj->attribute = '' " ,  but is could be change via 
> $this->id='',  
> > inside of  class , isn't it ?
> > 
> >  How to modify __set function ?  
> 
> don't - let __set() be the policeman it's supposed to be.
> either create a private function to initialize values or set 
> the values directly in the array
> 
> private function init($k, $v)
> {
>       if (isset($this->p_arrPublicProperties[$k]))
>               $this->p_arrPublicProperties[$k]['value'] = $v; }
> 
> > 
> > thanks for any advises.
> > 
> > regards!
> > ked
> > 
> > 
> > the article is here: 
> > 
> ----------------------------------------------------------------------
> > ------
> > ------------------------
> > Eric Lafkoff (22-Feb-2006 02:56)
> > 
> > If you're wondering how to create read-only properties for 
> your class, 
> > the
> > __get() and __set() functions are what you're looking for. You just 
> > have to create the framework and code to implement this 
> functionality.
> > Here's a quick example I've written. This code doesn't take 
> advantage 
> > of the "type" attribute in the properties array, but is 
> there for ideas.
> > <?php
> > class Test
> > {
> > private $p_arrPublicProperties = array(
> >     "id" => array("value" => 4,"type" => "int","readonly" => true),
> >     "datetime" => array("value" => "Tue 02/21/2006 
> 20:49:23","type" => 
> > "string", "readonly" => true),
> >     "data" => array("value" => "foo", "type" => "string", 
> "readonly" =>
> > false)
> > );
> > 
> > //ked add!!!!!!!
> > public function __construct()
> > {
> >     $this->id = 100; //----------------------------will get 
>  exception !!
> > }
> > 
> > private function __get($strProperty) { //Get a property:
> > if (isset($this->p_arrPublicProperties[$strProperty])) { return 
> > $this->p_arrPublicProperties[$strProperty]["value"];
> > } else {
> > throw new Exception("Property not defined"); return false; } }
> > 
> > private function __set($strProperty, $varValue) { //Set a 
> property to 
> > a value:
> > if (isset($this->p_arrPublicProperties[$strProperty])) { //Check if 
> > property is read-only:
> > if ($this->p_arrPublicProperties[$strProperty]["readonly"]) { throw 
> > new Exception("Property is read-only"); 
> > ///////////////////////////////////---------------note here return 
> > false; } else { 
> $this->p_arrPublicProperties[$strProperty]["value"] = 
> > $varValue; return true; } } else { throw new 
> Exception("Property not 
> > defined"); return false; } }
> > 
> >    private function __isset($strProperty) {
> >     //Determine if property is set:
> >     return isset($this->p_arrPublicProperties[$strProperty]);
> >    }
> >    
> >    private function __unset($strProperty) {
> >     //Unset (remove) a property:
> >     unset($this->p_arrPublicProperties[$strProperty]);
> > }
> > 
> > }
> > $objTest = new Test();
> > print $objTest->data . "\n";
> > $objTest->data = "bar"; //Works.
> > print $objTest->data;
> > $objTest->id = 5; //Error: Property is read-only.
> > ?>
> > 
> 
> --
> PHP General Mailing List (http://www.php.net/) To 
> unsubscribe, visit: http://www.php.net/unsub.php
> 
> 
> 

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

Reply via email to