错误消息“严格标准:只有变量应该通过引用传递”
使用 array_shift() 时,可能会报告严格标准如果传递的参数是函数调用的结果,则会发出警告。这种行为看似不一致,因为它并不总是触发警告。
考虑以下代码:
$el = array_shift($instance->find(..))
在此示例中,引发警告是因为 find() 方法是不是一个变量。但是,以下代码不会产生警告:
function get_arr(){ return array(1, 2); } $el = array_shift(get_arr());
要理解此行为,让我们分析不同的代码片段:
error_reporting(E_STRICT); class test { function test_arr(&$a) { var_dump($a); } function get_arr() { return array(1, 2); } } $t = new test; $t->test_arr($t->get_arr());
此代码会生成严格标准警告,因为$t->get_arr() 方法不是变量,而是通过引用传递。此行为是违反直觉的,因为该方法返回一个数组值。
要在严格模式下避免此错误,请更改方法签名以避免使用引用或使用中间变量:
function test_arr($a) { var_dump($a); } $inter = get_arr(); $el = array_shift($inter);
以上是为什么 `array_shift()` 会触发'严格标准:只有变量应该通过引用传递”?的详细内容。更多信息请关注PHP中文网其他相关文章!