Re: Static Class Member References

From: Date: Mon, 12 Jul 2010 11:00:38 +0000
Subject: Re: Static Class Member References
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-306831@lists.php.net to get a copy of this message
On 11 July 2010 23:19, Daniel Kolbo <kolb0057@umn.edu> wrote: > Hello PHPers, > > I'm having some trouble understanding some PHP behaviour.  The following > example script exhibits the behaviour which I cannot understand. > [code] > <?php > > class A > { >        public static $a = 3; > >        function __construct() >        { >                //self::$a = $this; //[i] >                self::$a =& $this; //[ii] >        } > } > > class B extends  A > { >        function __construct() >        { >                parent::__construct(); >        } > } > > class C { >        var $c; > >        function __construct() >        { >                $this->c =& A::$a; >        } > > } > > > $c = new C; > $b = new B; > $cee = new C; > > var_dump($c->c); // [i] prints object(B), but [ii] prints int 3 > var_dump($cee->c); // [i] prints object(B), and [ii] prints object(B) > > ?> > [/code] > > Why does $c->c print 'int 3' ? > > I'm nervous to use "self::$a = $this;" because I don't want to be > copying the whole object.  However, isn't $this just a reference to the > object, so "self::$a = $this;" is just copying the reference and not the > actual object, right? > > Thanks in advance What do you think the value should be? A static property is bound to the class and not to an instance of the class.. So, &A::$a is a reference to the static value. If you alter the value, it will be altered for a subclasses of A and for any other reference to it.

« previous php.general (#306831) next »