Câu hỏi này càng thêm về lý do tại sao 'làm thế nào', nhưng nó đã gây phiền nhiễu cho tôi vài ngày nay. Hiện nay tôi đang làm một số công việc với CodeIgniter và quay trở lại PHP tạm thời từ Ruby, lỗi cho tôi về ma thuật phạm vi sau đây.PHP, một phạm vi biến lẻ?
<?php $query = $this->db->get('articles', 2);
if ($query->num_rows() > 0)
{
foreach ($query->result_array() as $row)
{
$data[] = $row; # <-- first appearance here
}
return $data; # <--- :S what?!
}
Như bạn có thể thấy, tôi không chính xác là một guru PHP, nhưng ý tưởng về lỗi phạm vi cục bộ mà bên ngoài vòng lặp foreach biến là 'có sẵn'. Vì vậy, tôi đã cố gắng này ra bên trong một cái nhìn:
<?php
if($a==1)
{
$b = 2;
}
echo $b;
?>
Những kết quả trong một thông báo lỗi:
Message: Undefined variable: b
Tài liệu PHP nói về Phạm vi địa phương, tuy nhiên tôi vẫn tự hỏi tại sao điều này xảy ra và nếu có là những quy tắc đặc biệt mà tôi không biết. Và nó làm tôi sợ :)
Cám ơn ý kiến chia sẻ,
Bạn tạo biến trong ví dụ thứ hai của bạn chỉ khi $ a là 1. Vì $ a không tồn tại (PHP thực sự đặt ra lỗi ở đây), $ b sẽ không được tạo. Trong ví dụ đầu tiên, tất cả các điều kiện đã được đáp ứng để dữ liệu $ được tạo và được sử dụng làm giá trị trả về. –
Ví dụ thứ hai là làm rõ hơn/quá minh rằng $ b bên ngoài dấu ngoặc nhọn có thể truy cập được - như các câu trả lời khác đã đưa ra, các dấu ngoặc nhọn không xác định phạm vi của các biến. Và điều đó, tôi không biết :) – Shyam
Tôi nghĩ rằng điều này đã lỗi thời, hoặc có thể là vấn đề STRICTness. Ví dụ thứ hai của bạn làm việc cho tôi và in 2. Tôi đang làm việc với 5.4.16 với STRICT tắt – Dennis