Theo các nhận xét, $products
được khởi tạo bởi một tệp bao gồm được bao gồm trong một hàm. Điều đó xác định phạm vi của nó đối với chức năng, thay vì toàn cầu. Vì vậy, bạn sẽ cần sử dụng global $products;
trước khi gọi bao gồm.
function func_that_defined_products() {
global $products;
include('file_that_defines_products.php');
}
// Now when called globally later, it will be at the correct scope.
function foo($bar)
{
global $products;
$query = 'SELECT p_name FROM 0_products WHERE p_category IN (' . $bar . ')';
// etc...
}
Trong mọi trường hợp, tôi thấy việc sử dụng $GLOBALS['products']
sẽ dễ đọc hơn một chút thay vì global
từ khóa. Và như mọi khi, bất cứ khi nào có thể, phương pháp ưu tiên là chuyển biến vào một hàm hơn là truy cập nó trên toàn cầu.
// If you can, do it this way
function foo($bar, $products) {
// $products was a param, and so global is unnecessary
}
Tuy nhiên, trong trường hợp của bạn, nếu CMS xác định nó, bạn có thể mất tính linh hoạt để thực hiện theo cách đó ...