代码之家  ›  专栏  ›  技术社区  ›  onassar

为什么php在这段代码中抱怨按引用传递?

php
  •  0
  • onassar  · 技术社区  · 16 年前
    $test = 'love';
    $eff = end(explode('ov',$test));
    

    $test = 'love';
    $eff = current(explode('ov',$test));
    

    我得到的错误是:

    4 回复  |  直到 16 年前
        1
  •  5
  •   strager    16 年前

    end 通过将数组的内部指针移动到数组的末尾来更改它。因此,参数必须是可变的(即对数组的引用),该操作才有用。这就是你收到警告的原因。

    current

        2
  •  2
  •   p00ya    16 年前

    这个 explode 返回一个临时数组,该数组不是“存储”到变量,而是直接传递给 end 这需要一个参考。

    current 不会触发错误,因为它是非变异的。其他变异函数,如 array_unshift reset 也抱怨。

        3
  •  2
  •   Ollie Saunders    16 年前

    end() 通过引用修改传递给它的数组。首先将爆炸指定给变量,以便 有一个可以修改的引用。

    $test = 'love';
    $explosion = explode('ov',$test);
    $eff = end($explosion);
    

    完() 只更改内部指针,这样它就不会修改数组的内容,除非使用 current() , each() , next()

    如果这一限制 完() 对你来说很烦人有很多解决方法:

    function last($array) { return end($array); }
    $test = 'love';
    $eff = last(explode('ov', $test));
    
        4
  •  0
  •   mauris    16 年前
    <?php
    
    error_reporting(E_STRICT);
    
    $test = 'love';
    $eff = end(explode('ov',$test));
    var_dump($eff);
    
    ?>
    

    如果您的错误报告级别未设置为 E_STRICT .

    end() .

    这是事实,因此: reset() , next() prev() 等等

    下面的方法会起作用。

    <?php
    
    error_reporting(E_STRICT);
    
    $test = 'love';
    $a = explode('ov',$test);
    $eff = end($a);
    var_dump($eff);
    
    ?>
    

    current()

    推荐文章