PHP undefined переменная

Для следующего кода:

line 10: echo "before require: ".$test; 
line 11: require( dirname(__FILE__) . 'load.php' );
line 12: echo "after require: ".$test;

Выход:

before require: 
Notice: Undefined variable: test in /home/test.php on line 12
after require:

Если load.php очень прост, сообщения не будет: "Примечание: undefined variable....". Почему и как "load.php" влияет на переменную $test?

5 ответов

Если переменная $test unset внутри load.php.

Это повлияет на вашу переменную $test, и вам будет показано Notice: Undefined variable.

поскольку переменные, объявленные перед оператором include, будут доступны внутри включенного файла, поэтому любое действие, выполняемое над переменной внутри включенного файла, повлияет на эту переменную.


Если вы настроили PHP, чтобы показать все уведомления, предупреждения и ошибки, вы увидите уведомление при запуске этого script: Примечание: Undefined variable: тестирование в /path/to/testtype.php в строке 3 Уведомления включены по умолчанию, когда вы используете php-development.inirather чем php-production.ini, и может быть очень полезно при отладке скрипты.


Ваша переменная не установлена, следовательно, уведомление.

Если вы установите значение переменной $test в load.php, оно будет иметь это значение.

Если вы этого не сделаете, ну... он останется undefined в вашем случае, а не хорошей практикой.


Из документации:

Когда файл включен, код, который он содержит, наследует область видимости переменной в строке, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут доступны в вызываемом файле с этой точки вперед. Однако все функции и классы, определенные во включенном файле, имеют глобальную область.


Разве это не должно быть require( dirname(__FILE__) . '/load.php' );?:)

Во всяком случае, похоже, что вы либо переменная unset() в load.php, либо измените display_errors и/или error_reporting на более высокий уровень в load.php.

licensed under cc by-sa 3.0 with attribution.