У меня есть требование ("config.php") с массивами, но все еще получаю неопределенную ошибку переменной - PullRequest
7 голосов
/ 29 июня 2010

У меня есть функция, которая выглядит примерно так:

require("config.php");

function displayGta()
{
    (... lots of code...)

    $car = $car_park[3]; 
} 

и файл config.php, который выглядит примерно так:

<?php
$car_park = array ("Mercedes 540 K.", "Chevrolet Coupe.", "Chrysler Imperial.", "Ford Model T.", "Hudson Super.", "Packard Sedan.", "Pontiac Landau.", "Duryea."); 
 (...)
?>

Почему я получаю Примечание: неопределенная переменная: car_park ?

Ответы [ 3 ]

14 голосов
/ 29 июня 2010

Попробуйте добавить

 global $car_park;

в вашей функции. Когда вы включаете определение $ car_park, оно создает глобальную переменную, и для доступа к ней из функции вы должны объявить ее как глобальную или обратиться к ней через суперглобальный $ GLOBALS.

Для получения дополнительной информации см. Справочную страницу с переменной областью действия .

10 голосов
/ 29 июня 2010

Несмотря на то, что Пол описывает, что происходит, я попытаюсь объяснить еще раз.

Когда вы создаете переменную, она принадлежит определенной области.Область действия - это область, в которой можно использовать переменную.

Например, если я должен был сделать это

$some_var = 1;

function some_fun()
{
   echo $some_var;
}

, то переменная не разрешена внутри функции, поскольку она не была создана внутрифункция.Чтобы он работал внутри функции, вы должны использовать глобальное ключевое слово, чтобы приведенный ниже пример работал

$some_var = 1;

function some_fun()
{
   global $some_var; //Call the variable into the function scope!
   echo $some_var;
}

Это наоборот, поэтому вы не можете сделать следующее

function init()
{
   $some_var = true;
}

init();

if($some_var) // this is not defined.
{

}

ТамЕсть несколько способов обойти это, но самый простой из них - использовать массив $GLOBALS, который разрешен в любом месте скрипта, поскольку они являются специальными переменными.

Итак,

$GLOBALS['config'] = array(
   'Some Car' => 22
);

function do_something()
{
   echo $GLOBALS['config']['some Car']; //works
}

Также сделайтеубедитесь, что на вашем сервере отключены глобальные переменные Register в INI для обеспечения безопасности.http://www.php.net/manual/en/security.globals.php

1 голос
/ 29 июня 2010

Вы можете попробовать включить его в свою функцию, например:

function foo ($ bar) {

(код)

$ car = $ bar [3];

(код)

}

Тогда, когда вы это называете:

echo foo ($ bar);

...