Re: Static Class Member References

From: Date: Tue, 13 Jul 2010 08:46:06 +0000
Subject: Re: Static Class Member References
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-306859@lists.php.net to get a copy of this message
On 12 July 2010 22:54, Daniel Kolbo <kolb0057@umn.edu> wrote: > Richard Quadling wrote: >> 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. >> > > I think > var_dump($c->c); would print object(B), but it's printing int 3. > > The reference is *not* being updated.  I think this is a bug.  What do > you think? > > Thanks > ` > > What version of PHP are you using?

« previous php.general (#306859) next »