* Jason Barnett <[EMAIL PROTECTED]> :
> Matthew Weier O'Phinney wrote:
> ...
> > This doesn't demonstrate what the OP was talking about, which is initial
> > assignment of an object using a reference operator. The results of this
> > make perfect sense to me -- the references are passed exactly as I would
> > expect. 
>
> But not exactly as I would expect!  I thought that all objects were 
> created as references, but apparently this is not the case.  

Here's what happens (in PHP5) with the statement '$obj = new Class();':

* the 'new Class()' construct creates an object
* it then returns a reference to the object
* assignment is then to the reference

Thus, $obj is actually a *pointer* to the object -- not the actual
object.

> Is there some kind of dereferencing going on when you're using an
> object on the right side of the assignment (=) operator?

No. It's simpler: you're simply passing around a reference to the
object. 

Before, in PHP4, when you would use assignment, the variable on the left
side would receive a *copy* of the object on the right -- a clone of the
object. *UNLESS* what you had on the right side was a reference; then it
would clone the reference, meaning you have the same behaviour as in
PHP5.

This is why the $obj =& new Class() idiom occurred in PHP4; that way you
could pass around your object safely, because you were simply passing
around a reference to an object. PHP5 simplifies this by simply
assigning the object reference only in the first place.

-- 
Matthew Weier O'Phinney           | WEBSITES:
Webmaster and IT Specialist       | http://www.garden.org
National Gardening Association    | http://www.kidsgardening.com
802-863-5251 x156                 | http://nationalgardenmonth.org
mailto:[EMAIL PROTECTED]         | http://vermontbotanical.org

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to