Reply to Re: pointer behavior in PHP?

Your name:

Reply:


Posted by Michael Fesser on 01/22/08 19:40

..oO(davidgregan@gmail.com)

>Hi, I'm fairly new to PHP and I have a question regarding pointers.
>Below is an example binary tree implementation I found in the
>internet. It works great but I'm not sure how it works. Here's what
>I'm confused about, in the insert function the variable $pointer is
>set to $this->tree. Now, my current understanding is that after this
>the variable $pointer will contain the data from $this-> tree.

Nope. The tree is built with objects and objects in PHP 5 are always
addressed by a kind of reference (internally it's just a numeric handle
that identifies the object). So with

$pointer = $this->tree;

both variables simply reference the same root node of the tree. There's
still only one tree of objects.

>However, as the function continues $pointer is set to pointer->left
>(or right) until the correct index is found. at this point the value
>is added to the tree with $pointer->left=new leaf.
>
>In this case the value of pointer seems to be referencing a position
>in the $tree variable

Correct.

>instead of merely containing the data of $tree
>as I would expect. Furthermore, when $pointer->left is set to a new
>leaf, it is actually added to $tree and not just to $pointer.

Correct. $pointer always references a node of the tree. All of them are
of the class 'leaf' and have the defined properties. So regardless which
node is referenced by the $pointer variable, there's always a $data,
$left and $right property.

>So my
>question is, why is this variable behaving like a pointer in this case
>instead of just containing the value of tree?

Try to understand how objects are handled and addressed in PHP 5:

$foo = new Test();
$bar = $foo;

The first line creates a new object and assigns its internal number (the
object handle, for example 42) to $foo, hence $foo kinda references the
object with the internal number 42.

The second line simply copies the number stored in $foo to $bar, so now
both variables have the same value and therefore reference the same
object. The object itself is never copied unless you explicitly clone
it:

$foo = new Test();
$bar = clone $foo;

Now both variables reference _different_ objects.

Micha

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация