
- You are not logged in. | Login
March 14, 2007 4:46 am
- mellis
- Member


Difficulties with links to objects
I??™m terribly confused. Who can tell me if this code contains any bugs?
<?php
class Simple
{
public $name;
}
$obj1 = new Simple();
$obj1->name = 'obj1';
$obj2 = new Simple();
$obj2->name = 'obj2';
$ref1 = $obj1;
$ref2 = $ref1;
$ref1 = $obj2;
print 'name: '.$ref2->name; // output name: obj1
?>I??™ve examined manual but haven??™t found any explanation.
P.S. PHP 5.2
March 14, 2007 4:48 am
- sirburpsalot
- Member


Re: Difficulties with links to objects
$ref1 = $obj1; // $ref1 is a link to obj1
$ref2 = $ref1; // $ref2 is a link to obj1
$ref1 = $obj2; // $ref1 is a link to obj2
Everything seems to be all right to me.
March 14, 2007 4:50 am
- mellis
- Member


Re: Difficulties with links to objects
$ref1 = $obj1; // $ref1 is a link to obj1
If we follow the manual strictly, we??™ll see that both $ref1 and $obj1 are links to the same content. After $ref2 = $ref1 another link to the same content should be added.
Thus after $ref1 = $obj2 all three links should indicate to $obj2.
In the manual it is written that links in PHP are different from indicators in C. At this there is no such type as ???link??™ in PHP and so it??™s impossible to check what $ref2 is.
Generally basing on the work of the template we may say that PHP differentiates links types.
March 14, 2007 4:52 am
- mmwfan
- Member


Re: Difficulties with links to objects
$ref1 = obj1;
ref1 -> obj1;
$ref2 = $ref1;
ref2 -> obj1 instead of ref2 -> ref1 -> obj1;
$ref1 = $obj2;
ref1 -> obj2, ref2 isn??™t involved
March 14, 2007 7:18 am
- mellis
- Member


Re: Difficulties with links to objects
Now I??™ll try to formulate more precisely what exactly embarrasses me.
<?php
class Simple
{
public $name;
}
$obj1 = new Simple();
$obj1->name = 'obj1';
$obj2 = new Simple();
$obj2->name = 'obj2';
$ref1 = $obj1;
$ref1 = $obj2;
print 'name: '.$obj1->name; // "name: obj1"
?>As it is known objects in PHP5 are transmitted via link i.e. string $ref1 = $obj1 is equal to $ref1 =& $obj1. We??™ll try to replace this string:
<?php $ref1 =& $obj1; $ref1 = $obj2; print 'name: '.$obj1->name; // in this case "name: obj2" ?>
Strings $ref1 = $obj1 and $ref1 =& $obj1 turn out not to be equal.
We??™ll try to change the following string:
<?php $ref1 =& $obj1; $ref1 =& $obj2; print 'name: '.$obj1->name; // in this case "name: obj1" ?>
It is quite logical because it has to be so.
Generally speaking in case with objects links act according to some other rules which are not described in the manual or maybe I have missed something??¦
March 14, 2007 7:24 am
- Conker
- Member


Re: Difficulties with links to objects
As it is known objects in PHP5 are transmitted via link
Not everyone knows it??¦ You??™d better cite the manual.
March 14, 2007 7:27 am
- mellis
- Member


Re: Difficulties with links to objects
OK, I??™ve found. It has been already discussed here http://www.php.net/manual/en/language.oop5.basic.php
March 14, 2007 7:31 am
- PilgrimFarAway
- Member


Re: Difficulties with links to objects
mellis, where is such behavior discussed? Show me the link, please.
March 14, 2007 7:38 am
- mellis
- Member


Re: Difficulties with links to objects
In the unit ???new??™
<?php $assigned = $instance; $reference =& $instance; $instance->var = '$assigned will have this value'; $instance = null; // $instance and $reference become null var_dump($instance); var_dump($reference); var_dump($assigned); ?>
The above example will output:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}Also
http://www.php.net/manual/en/language.o … .php#50469
http://www.php.net/manual/en/language.o … .php#64410
In the unit "User Contributed Notes"
March 14, 2007 7:41 am
- selmahyekishot
- Member


Re: Difficulties with links to objects
More detailed about links and objects you may read here - http://blog.libssh2.org/index.php?/...g-lied-to..html


