Нужно ли использовать глобальную переменную? - PullRequest
3 голосов
/ 15 октября 2011

У меня проблема с global variable scope в php .Ниже приведен мой фрагмент кода, можете ли вы сказать мне, что я делаю неправильно, и если использование глобальной переменной не требуется?

Версия PHP - 5.3.5

a.php

global $login;
$login = 0 ;
if(1==1) // here is some session checking condition
{
    echo "<BR/>inside if".__FILE__;
    $login = 1 ;
}

function alpha() {
    echo "<BR/>".__FUNCTION__;
    global $login;
    if($login)
    {
        echo "<br/>Login is available";
    }
    else
    {
        echo  "<br/>Login not available";
    }
}

b.php

$login=0;
if(1==1) // same condition define in a.php
{
    ECHO "<BR/>inside if".__FILE__;
    $login = 1;
}
if($login == 0)
{
    echo "out";
}

login.php

require_once("a.php");
require_once("b.php");
alpha();
echo "<BR/>".__FILE__;
echo $login;

Кажется, что мой подход неправильный, какой метод лучше?Требуется ли объявление какой-либо глобальной переменной в этом сценарии?Будет ли $login в b.php влиять на какую-либо переменную?

примечание: if условие в a.php и b.php одинаково, но я не могу объединить.

Ответы [ 2 ]

3 голосов
/ 16 октября 2011

Использование функций или подход на основе классов.

Простая функция будет

function is_logged_in() {
    static $login;
    if (isset($login)) return $login;
    $login = 0;
    if (1 == 1) { // here is some session checking condition
        $login = 1 ;
    }
    return $login;
}
0 голосов
/ 16 октября 2011

Да, я согласен с Мартином, вы должны попробовать классы.

И я хотел бы добавить, что такое разделение логики на два файла неправильно.Если это операция с $ login, вы должны просто создать класс, такой как «Login», и сконцентрировать все решения и операции, касающиеся входа в систему (или управления пользователями в целом), в этот класс.Нет причин разделять его на несколько файлов.

Надеюсь, я помог.

...