On 10/4/10 4:01 PM, Pierre Rineau wrote:
On Mon, 2010-10-04 at 19:53 +0200, luca capra wrote:The $op presave was my problem. This is a syntax error my_fill_cck(&$node ); and this should be my hook: function mymod_nodeapi($node ... because&$node is a pointer, and what I need is a reference (that is how is passed an object ). It's right ? Interesting, I learnt something new :) Regards, LucaWith PHP 4, objects where like any other values, copied when passed as function parameter, which means any modification on the local copy wouldn't be visible within the caller function. With PHP 5, you don't have to add the& operator to force the argument to pass by reference because objects are always references (as we could see in other languages such as python or java, or such).
Technicality: Without the &, you are passing by value. Always. The difference is that in PHP 5 what you are passing is a handle to an object rather than the object itself (not to be confused with a pointer as one sees in C/C++, as those don't exist in PHP). So there's one object, but two variables of type "handle to get an object" that both point to the same object.
It's a very subtle difference that only bites you occasionally, but when it does it bites hard. :-)
The net result is the same: you need &$node to be compatible with PHP 4, but as of PHP 5 / Drupal 7 you don't want it anymore.
--Larry Garfield
