Re: Static Class Member References
| From: | Daniel Kolbo | Date: | Mon, 12 Jul 2010 21:54:13 +0000 |
| Subject: | Re: Static Class Member References | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-306851@lists.php.net to get a copy of this message | ||
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
`