[wp-hackers] passing references to do_action/apply_filters
Nikolay Bachiyski
nbachiyski at developer.bg
Thu Aug 4 09:20:53 GMT 2005
In newer default php.ini setups the value of
allow_call_time_pass_reference (see http://uk2.php.net/ini.core)
is Off, which does not allow to pass arguments by reference unless it is
explicitly noted in the function's declaration.
However, sometimes is is needed a hook to change the values of its
arguments. For example see the patch for pre_ping hook
(http://trac.wordpress.org/ticket/1489 and
http://trac.wordpress.org/changeset/2743 ) and if
allow_call_time_pass_reference is Off it causes a Warning: "Warning:
Call-time pass-by-reference has been deprecated.." (see
http://trac.wordpress.org/ticket/1547).
Unfortunately there isn't an easy way to control whether
do_action/apply_filter arguments are passed by reference of by value.
Of course there are some dirty hacks, as for example using an array to
pass all the variables:
<?php
function varargs_by_ref($arg_list = null) {
if (is_array($arg_list)) {
foreach ($arg_list as &$arg) {
# do whatever you want with $arg...
}
}
}
$by_ref = 'to_be_midified_inside_func';
$by_val = 'to_be_passed_by_value';
varargs_by_ref(array('baba', &$by_ref, $by_value));
?>
Any other suggestions?
Nikolay.
More information about the wp-hackers
mailing list