$el = array_shift($instance->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());
这将生成以下输出:
Strict Standards: Only variables should be passed by reference in `test.php` on line 14
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
原因?
test::get_arr()
方法不是变量,在严格模式下,它将生成警告。此行为非常不直观,因为get_arr()
方法返回数组值。要在严格模式下解决此错误,请更改方法的签名,使其不使用引用:
function test_arr($a) {
var_dump($a);
}
由于您无法更改
array_shift
的签名,因此还可以使用中间变量:$inter = get_arr();
$el = array_shift($inter);
关于php - 错误消息 “Strict standards: Only variables should be passed by reference”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40290404/