在变量之前存在和号的PHP错误

时间:2011-06-16 18:02:25

标签: php

在下面的第一个foreach语句中,$ widgets变量之前的&符号的存在导致旧版本的PHP被阻塞。问题是没有&符号时该功能不起作用(我不记得为什么它需要,因为它是由另一个开发人员开发的。)

我的问题是,为什么会导致PHP 4.4出错?为什么首先需要它?

function exclude_widget_check( $sidebars_widgets )
{
    if(is_home())
    {
        foreach ( $sidebars_widgets as $sidebar_id => &$widgets ) {
            if ( 'my-widget' != $sidebar_id ) {
                continue;
            }
            foreach ( $widgets as $idx => $widget_id ) {
                if ( 0 === strncmp( $widget_id, 'my_slider', 6 ) ) {
                    echo 'Unset widget';
                    unset( $widgets[$idx] );
                }
            }
        }
    }
    return $sidebars_widgets;
}

2 个答案:

答案 0 :(得分:0)

看起来你遇到了引用问题。您可能正在处理有关其较早实现的问题。

答案 1 :(得分:0)

&符号是PHP中的“按引用传递”运算符。 IE,这意味着当你编辑$ widgets时,你正在编辑$ sidebars_widgets数组中的实际元素,而不是它的副本。

如果它不能与旧版本的PHP一起使用,我只会通过索引访问原始元素,改变它:

unset( $widgets[$idx] );

到此:

unset( $sidebar_widets[$sidebar_id][$idx] );