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,
Luca

With 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

Reply via email to