PHP $ var не определено при использовании нескольких require () - PullRequest
0 голосов
/ 01 сентября 2011

Я устанавливаю $ baseurl в файле settings.php.

В моем index.php у меня есть 3 require () подряд для settings.php / header.php /masthead.php.

Когда я подхожу к эхо $ baseurl, оно не определено.Если я определю $ baseurl в header.php, то он будет работать в файле header.php.

Как получить $ baseurl, который будет определен в файле settings.php и пригоден для использования в каждом из них require ()

Ответы [ 4 ]

0 голосов
/ 01 сентября 2011

Если вам требуется () файлы в функции, переменные определяются в области действия функции: они не являются глобальными.

Используйте $GLOBALS['baseurl'] = '...'; в settings.php

0 голосов
/ 01 сентября 2011

Если вы определите его в settings.php, он должен быть доступен в глобальной области действия всех включенных сценариев.Когда вы вводите функцию, область видимости меняется, поэтому переменная не будет доступна, если вы не «импортируете» ее, объявив global $baseurl; в начале функции (хотя и не рекомендуется).

0 голосов
/ 01 сентября 2011

Если settings.php включен первым, а $baseurl определен как глобальная переменная в settings.php, он будет доступен во всех последующих включенных файлах. Если переменная определена внутри функции в settings.php, она должна быть определена как глобальная:

$GLOBALS['baseurl'] = 'theurl';

Если к нему обращаются внутри функции в каком-либо из последующих включенных файлов, к нему необходимо будет также обратиться через $GLOBALS[]:

echo $GLOBALS['baseurl'];

Если вы ожидаете получить доступ к глобальной переменной из нескольких файлов, настоятельно рекомендуется всегда использовать массив $GLOBALS[], поскольку в любой области действия остается очевидным, что переменная устанавливается и доступна глобально. .

0 голосов
/ 01 сентября 2011

Порядок включения

Файл, который устанавливает $baseurl, должен быть require_once() первым, чтобы последующие файлы имели доступ к переменной.

Область действия

Если вы определяете $baseurl в функции или файлы require_once() находятся внутри функции, тогда $baseurl будет пойман в область действия этой функции.Это было бы так, если бы settings.php выглядел примерно так:

<?php
function setup_config() {
    $baseurl = 'http://www.example.org';
}

Или требовал изнутри функции

<?php
function include_a_file($file) {
    require_once 'my/base/path/' . $file;
}

Это задокументировано в части Variable Scope Руководства по PHP.

Один из способов обойти это - добавить $baseurl в качестве элемента в $GLOBALS массив вместо отдельной переменной:

$GLOBALS['config']['baseurl'] = 'my/base/url/';

Примечание Я добавил элемент ['config'], чтобы пространство имен вашей конфигурации отличалось от всего, что вы можете испытать желание поместить в $GLOBALS.

переменную unset()

Другая возможность состоит в том, что вы можете вызывать unset($baseurl) где-то еще в коде, что помечает переменную как неопределенную.

...