Rozważ następujący kod:
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());
Spowoduje to wygenerowanie następującego wyniku:
Strict Standards: Only variables should be passed by reference in `test.php` on line 14
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
Powód? test::get_arr()
Metoda nie jest zmienna i w trybie ścisłym spowoduje to wygenerowanie ostrzeżenia. To zachowanie jest wyjątkowo nieintuicyjne, ponieważ get_arr()
metoda zwraca wartość tablicy.
Aby obejść ten błąd w trybie ścisłym, zmień podpis metody, aby nie używała odwołania:
function test_arr($a) {
var_dump($a);
}
Ponieważ nie możesz zmienić podpisu array_shift
, możesz również użyć zmiennej pośredniej:
$inter = get_arr();
$el = array_shift($inter);