The problem here is that there are two different concepts involving the same word "reference".
If you're familiar with C++ and Java, one way to look at this is to see that the concept of a reference variable is similiar to C++ references. Such a reference is effectively an alias that cannot be rebound as alias of different object. Thus, if you have a reference parameter (i.e., you declare it with the ampersand syntax), and you assign to the reference parameter within the function, the variable in the caller will be changed, since the reference parameter is effectively an alias for that variable (or rather the object represented by that variable).
Objects in PHP4 were like objects in C++: passing an object by value meant that a copy was made. Thus, if you assigned to the parameter, the object in the caller remained unchanged, because it is a different object. If you modified the object say by calling a setter function, the object in the caller still remains unchanged, because it is a different object.
Objects in PHP5, on the other hand, are similiar to Java objects: the variables are "object references", such that object assignment (copying) actually assigns the reference to the object rather than the object itself. Thus, if you assigned to the parameter, the object in the caller remains unchanged, because you're just getting the object reference to point to a different object, but the object reference in the caller continues to point to the original object. But if you modified the object say by calling a setter function, then the object in the caller would be changed, because you modified that object through a different object reference to the same object (i.e., the same "object identity" that Weedpacket mentioned in post #5). This is akin to passing (by value) a pointer to an object in C++ (or C), except that there is no pointer arithmetic and there is no need to explicitly dereference the pointer. Similiarly, there is no need to worry about the cost of copying an object (unless you clone it) since object references, like pointers, should be cheap to copy.
So, this should answer traq's question in post #6: there is a use case for passing objects by reference in PHP5, i.e., when you do not merely want to modify the existing object, but to assign an entirely different object, e.g., for use as an out or in/out parameter as what Derokorian mentioned in post #7.