Когда это произойдет в PHP? - PullRequest
0 голосов
/ 25 декабря 2009

Это надуманный пример

function test()
{
    global $a;
    $a=2;
}

test();

//here $a will report undefined variable

echo $a;

Я как-то сейчас сталкиваюсь с этой проблемой, но не могу воспроизвести ее простым способом!

EDIT

Я имею в виду такие операции, как include или аналогичные , когда

Ответы [ 3 ]

1 голос
/ 25 декабря 2009

Вы недавно отредактировали, чтобы сказать, что это происходит, когда вы 'включаете' файл.

Файлы и глобализация на самом деле не ладят. Вы на самом деле должны Global и в файл. Так что, если test1.php имеет этот код

$a = 5;

и test2.php имели этот код:

$a = 3;

и test3.php имели этот код:

$a = 10;

и наконец (Да, слишком много файлов) testMaster.php имеет этот код

include 'test1.php';
include 'test2.php';
include 'test3.php';
echo $a;

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

Теперь, я почти уверен, что это не повлияет на код, который вы дали нам, или если будет включен function test(), а затем вызван test(); и сразу после него вы добавите echo $a;. Но если вы определите AND для вызова test() в отдельном файле, а не в echo $a, это вызовет глобальную ошибку.

Я не уверен, отвечает ли это на ваш вопрос, но да, это недостаток в системе include.

0 голосов
/ 25 декабря 2009

Это может произойти, если вы сделаете это внутри test ():

unset($GLOBALS['a']);

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

0 голосов
/ 25 декабря 2009

Один из способов получения неопределенной переменной в месте, о котором вы упомянули, - это когда вы делаете $a локальным для функции test(), не имея декларации global $a;.

<?php
function test()
{
    //global $a;
    $a=2;
}

test();

//here $a will report undefined variable

echo $a;
?>

Другой может быть, вы вызываете функцию test() после echo:

<?php
function test()
{
    global $a;
    $a=2;
}


//here $a will report undefined variable

echo $a;

test();
?>

Переменная a не была инициализирована при печати и приведет к Notice: Undefined variable: a

Предоставленный вами фрагмент должен работать просто отлично. В тот момент, когда вы повторяете $a, оно больше не определено и ему присвоено значение в функции test().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...