|
Posted by News.Php.Net on 01/30/05 18:43
> No
>
> news.php.net wrote:
>> <?
>>
>> class A
>> {
>> var $name;
>> function A($str)
>> {
>> $this->name = $str;
>> }
>> }
>>
>> $arr = array();
>>
>> //Put to array to objects of class A,
>> // where their attribute A::a is assigned a different value
>> //objects are assigned to an array by reference
>>
>> $a = &new A("qaz");
>> $arr[0] = &$a;
>
> $arr[0] and $a reference now the same variable
>
>>
>> $a = &new A("wsx");
>
> by changing $a you also changed $arr[0]
No. referencs are not pointers! Here in " $a = &new A("wsx") " I assign $a
by reference, and now $a references the different location, and $arr[0]
references the same. Assigning $a by references doesnt affect $arr[0],
though the pointed to the same location before...
After all this is the prove:
This is my previous assignment code:
class A
{
var $name;
function A($str)
{
$this->name = $str;
}
}
$arr = array();
//Put to array to objects of class A,
// where their attribute A::a is assigned a different value
//objects are assigned to an array by reference
$a = &new A("qaz");
$arr[0] = &$a;
$a = &new A("wsx");
$arr[1] = &$a;
//HERE IS THE PROVE
print_r($arr);
//Watch the OUTPUT... there are DIFFERENT objects laying in the array! This
is the point of my question...
// But if you do this:
foreach($arr as $a)
{
echo "(".$a->name.")";
}
// You see that iterating the objects it somehow references the same
object...
// or the same 'name' attrribute of the first object in the array...
>
>> $arr[1] = &$a;
>
> now $a, $arr[0] and $arr[1] reference the same variable, they just have
> different names.
>
> More:
> http://sk.php.net/manual/en/language.variables.php
> http://sk.php.net/manual/en/language.references.php
>
>>
>>
>> //But watch the output!!!
>> // It is "(qaz)(qaz)", which means that the attribute of a first
>> // object assigned to array is outputted!!! WHY?!?!!!
>> foreach($arr as $a)
>> {
>> echo "(".$a->name.")";
>> }
>> ?>
>>
[Back to original message]
|