Zgodnie z komentarzami, $products
został zainicjowany przez dołączony plik, który został dołączony do funkcji. To określa jej zakres do funkcji, a nie globalnie. Musisz więc użyć global $products;
przed wywołaniem dołączenia.
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...
}
W każdym razie uważam, że bardziej czytelne jest użycie $GLOBALS['products']
zamiast global
słowo kluczowe. I jak zawsze, gdy tylko jest to możliwe, preferowaną praktyką jest przekazywanie zmiennej do funkcji zamiast uzyskiwania do niej dostępu globalnie.
// If you can, do it this way
function foo($bar, $products) {
// $products was a param, and so global is unnecessary
}
Jednak w twoim przypadku, jeśli CMS to definiuje, możesz stracić elastyczność, aby zrobić to w ten sposób...