Вопрос новичка php: глобальные переменные для сети - PullRequest
1 голос
/ 28 марта 2011

Я хотел бы установить некоторые глобальные переменные для хранения нескольких вещей.я пробовал это так:

function init_web()
{
    $webname = "myweb";
    $web['webname'] = $webname;
    $web['server_root'] = $_SERVER['DOCUMENT_ROOT']."/$webname/"; 
    $web['lang']="en";
}

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

в чем прикол, чтобы сделать его глобальным?

спасибо

Ответы [ 6 ]

5 голосов
/ 28 марта 2011

Несмотря на то, что вы получите обычный «глобальные переменные - это плохо», вот основы:

$web = array(); // define the var at the "top level" of the code tree, outside any functions/classes.
function init_web() {
    global $web; // make it visible in the function
    $web['lang'] = 'en'; // make some settings
}

в принципе, у вас это было, но вы не определили переменную вне функции.Просто сказать «глобальный» внутри функции волшебным образом не создаст его вне функции - он уже должен существовать, прежде чем вы попытаетесь «усвоить» его в функции и изменить / получить доступ к ее содержимому.

2 голосов
/ 28 марта 2011

Вы на правильном пути:

$web = array();

function init_web()
{
    global $web;
    $webname = "myweb";
    $web['webname'] = $webname;
    $web['server_root'] = $_SERVER['DOCUMENT_ROOT']."/$webname/"; 
    $web['lang']="en";
}
1 голос
/ 28 марта 2011

вы можете использовать переменные сеанса:

session_start(); // at the top of the php page
function init_web()
{
    $webname = "myweb";
    $_SESSION['webname'] = $webname;
    $_SESSION['server_root'] = $_SERVER['DOCUMENT_ROOT']."/$webname/"; 
    $_SESSION['lang']="en";
}

теперь они могут быть доступны глобально: -)

1 голос
/ 28 марта 2011

Вы можете определить их как постоянные

define('WEBNAME',"myweb");

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

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

0 голосов
/ 28 марта 2011

Если вы просто храните скалярные значения (строки, целые числа, числа с плавающей точкой - не массивы, объекты), вы должны использовать define().

Это сделает ваши конфигурации глобальными и постоянными.

Как ответить на ваш вопрос,

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

0 голосов
/ 28 марта 2011

Объявлять $web вне функции и ссылаться на нее с помощью $GLOBALS superglobal:

// Declare in global scope
$web = array();

function init_web()
{
  $webname = "myweb";
  // Access via superglobal in function scope
  $GLOBALS['web']['webname'] = $webname;
  $GLOBALS['web']['server_root'] = $_SERVER['DOCUMENT_ROOT']."/$webname/"; 
  $GLOBALS['web']['lang']="en";
}
...