Possible Duplicate:
In PHP (>= 5.0), is passing by reference faster?
Say I’m dealing with a large-ish (just how big isn’t important) array of data and passing it into a function. It will, of course, be passed by value and not by reference by default. Okay, I know that.
So my question is:
If the data stored in this array were large enough, can worthwhile
performance or memory usage gains be experienced by storing the data
in an object (say, a stdClass) or by using foo(&$myData) so that the data is
passed by reference instead of value?
My understanding is that when it’s passed by value PHP will create a whole new pointer to a whole new memory allocation for the data while the passed-by-value variable exists in the function scope. In such an event, might passing a large amount of data by reference be worthwhile for this reason? I don’t know if this understanding is correct … that’s part of the question.
Note: this is a hypothetical, so don’t bring up anything about “premature optimization”, “you’d be better off to minimize disk I/O before worrying about this”, “depends on how much RAM you have”, “etc.”
UPDATE
A further question: say the data is being passed to an object constructor to be stored as one of that object’s properties and it’s being modified in some small way as it’s stored in the new object’s property. Will there then be a significant difference in the memory usage aspect of the operation? Is it correct to assume that it will be better to define the data in the destination format to begin with to avoid the cost incurred by altering the data down the line?
I cannot find anything official, but from my understanding the Zend Engine will only copy the array when you attempt to write to it. That is, there is no copy made in this following code:
However, in this code, a copy will be made, assuming no other optimizations are made (ie: this example function doesn’t do anything, so it may be excluded entirely).
So to answer your question, no, passing by reference will not make any difference. If you actually need to modify the original, then of course you need a reference either way.
Note, I found a duplicate question here: In PHP (>= 5.0), is passing by reference faster?
And here: How does PHP assign and free memory for variables?
Update
This is the code I ran which demonstrated a significant memory usage by the object, though not as much as the array itself (about 2/3).