Clone Operations

php.internals

Ilia A.

20 years ago
When it comes to "empty" clone statements, should they be executed and then free the result (current behavior) or avoid clone all together. For example when class x { function __clone() { echo "hello"; } } clone new x(); code is executed, should it print hello or not print anything at all, treating the clone operation as a NOOP? Current behavior calls clone and then frees the result, meaning that "hello" is printed, but I am uncertain that this is the correct behavior, any comments? Ilia Alshanetsky

Nuno Lopes

20 years ago
I think that "hello" should be printed. Even if the result of clone()ing isn't going to be used, the side-effects should always occur (at least to be consistence). I would bet that other languages would do the same. Nuno ----- Original Message -----

Marcus Börger

20 years ago
Hello Ilia, hello should be printed. As in you cannot outsmart what some people might do in their code. For example in C++ such stuff gets optimized out but only as long as the compiler detects that doing so does not result in a different bahvior. This is something you need to know for particular stuff in c++ like the ability of some compilers that can optimized out implicit clone on function return - but only if the compiler would generate the clone....ok, now back to php, do we really want to make it that complex? I think if the programmer writes clone or it is a consequnce of something else then let the clone happen and the rule end there. best regards marcus Wednesday, June 7, 2006, 3:56:44 PM, you wrote:
> When it comes to "empty" clone statements, should they be executed > and then free the result (current behavior) or avoid clone all together. > For example when class x { function __clone() { echo "hello"; } } > clone new x(); code is executed, should it print hello or not print > anything at all, treating the clone operation as a NOOP?
> Current behavior calls clone and then frees the result, meaning that > "hello" is printed, but I am uncertain that this is the correct > behavior, any comments?
> Ilia Alshanetsky
Best regards, Marcus

Richard Lynch

20 years ago
On Wed, June 7, 2006 8:56 am, Ilia Alshanetsky wrote:
> When it comes to "empty" clone statements, should they be executed > and then free the result (current behavior) or avoid clone all > together. > For example when class x { function __clone() { echo "hello"; } } > clone new x(); code is executed, should it print hello or not print > anything at all, treating the clone operation as a NOOP? > > Current behavior calls clone and then frees the result, meaning that > "hello" is printed, but I am uncertain that this is the correct > behavior, any comments?
Seems to me that if they want echo "hello"; on __clone() for debugging, we shouldn't cripple it... [shrug]
-- Like Music? http://l-i-e.com/artists.htm