Можно ли использовать global в php?

Здравствуйте, кто знает можно ли использовать (Поразумеваеться целесообразность и безопасность) Ключевое слово global в php.

Например у меня есть обьект класса $app
И что бы сделать его доступном в другом классе, не наследуя его полностью, написать:

class Test{
  public function metod(){
   global $app;
    $app->save();
}

}


Чем это черевато? Нормальная это практика или нет?
  • Вопрос задан
  • 4947 просмотров
Пригласить эксперта
Ответы на вопрос 3
@IceJOKER
Web/Android developer
везде один и тот же ответ - использование GLOBAL в php - ЭТО НЕ ЕСТЬ ГУД

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

Безопасная альтернатива для global vars php - stackoverflow.com/questions/7290993/safe-alternati...
Ответ написан
OnYourLips
@OnYourLips
Нельзя.
Нет ни одного примера кода, где его использование было бы оправдано.
Любое его использование можно заменить с улучшением качества кода.

Даже суперглобальные переменные сразу же прячут с созданием нормального объекта запроса сразу же в индексном файле:
$request = Request::createFromGlobals();
Ответ написан
socengel
@socengel
7 лет native php в продакшене, онлайн 20000+,
class Test
{
    public function __construct( & $app )
    {
        $this->app = $app;
    }

}

$test = new Test( $app );


Вот такой код еще куда ни шло но и он я бы сказал не очень хорош.

Использовать global можно только в конструкторе класса чтобы присвоить внутренним полям класса глобальные значения. При условии что эти глобальные переменные не объекты, и создаются кодом который находится в большой зависимости, например в index.php на котором 5 лет группа программистов писала код. Естественно поменять такие переменные не всегда возможно (ввиду необходимости глобального рефакторинга). Либо когда это "псевдоконстанты" как я их называю, когда переменной присваивается значение и оно не меняется на протяжении всего выполнения скрипта. В любом другом случае это крайне не рекомендуется.

Если следовать этому правилу (которое я придумал сам) то в принципе ничего страшного случится не может.
А вообще лучше всетаки посмотреть в сторону Dependency injection.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 авг. 2020, в 00:34
10000 руб./за проект
10 авг. 2020, в 23:01
1500 руб./за проект
10 авг. 2020, в 19:19
20000 руб./за проект