Hãy xem xét đoạn mã sau:
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());
Điều này sẽ tạo ra kết quả sau:
Strict Standards: Only variables should be passed by reference in `test.php` on line 14
array(2) {
[0]=>
int(1)
[1]=>
int(2)
}
Nguyên nhân? Các test::get_arr()
phương pháp không phải là một biến và dưới chế độ nghiêm ngặt này sẽ tạo ra một cảnh báo. Hành vi này cực kỳ không trực quan vì get_arr()
phương thức trả về một giá trị mảng.
Để khắc phục lỗi này ở chế độ nghiêm ngặt, hãy thay đổi chữ ký của phương thức để nó không sử dụng tham chiếu:
function test_arr($a) {
var_dump($a);
}
Vì bạn không thể thay đổi chữ ký của array_shift
bạn, bạn cũng có thể sử dụng một biến trung gian:
$inter = get_arr();
$el = array_shift($inter);