@BushaevDenis

"Global" или «&»?

В чем отличие global от ссылок? По сути global это же ссылка на $GLOBALS['var']?
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 3
PretorDH
@PretorDH
HTML5, CSS3, PHP, JS - люблю в чистом виде.
Объявляя глобальную переменную в области видимости функции - вы прописываете даете доступ к ней из функции и для переменной доступ к функции (именно так в двух направлениях). При этом локальная изменения переменной влияет на значение глобальной, но и изменения глобально тоже влияют на значение переменной внутри функции.

При этом возникают непредвиденные ситуации, сложные к выявлению.
Например: Если при выполнении функции у вас случилось исключение . Обработчик исключения может с легкостью изменить глобальную переменную. Но если функция не учитывает эту "асинхронность", то далее может случится все что угодно!!! - зацикливание, деление на ноль или, что еще хуже, случайное прохождение логики по другой ветке (которое будет сложно выявить)...

Последствия применения глобальных переменных самые плачевные:
  • сложно обнаруживаемые ошибки;
  • безопасность - "хромая на две ноги";
  • сложности в рефакторинге и понимании кода;
  • сложность в масштабировании стремящаяся к инифинимуму;
  • не прогнозируемое значение переменной;
  • возможная инициализация/реинициализация переменной в разных местах кода.

Что относится к косвенному вызову/привязке переменной или как это ещё называют "внедрение зависимостей" (Dependency injections) - значоком "&"...
Такая переменная может хранится в любой области видимости, а не только в глобальной. Но проблемы - те же, что и при использовании глобальной переменной, может даже и более усугубленные. Так как ещё более сложно выявление ошибок и возможна перелинковка таких параметров между разными функциями использующими друг-друга!

Принципы такие:
  • Если вы используете глобальные переменные, то масштабируемость и отказоустойчивость кода будет скорее всего никакая. Код сразу в топку;
  • Если косвенная привязка появляется в параметрах функции - это явный показатель того, что функция слишком сложна и скорее всего нужно разделить функцию на меньшие, или создать класс на основе этой функции, или разделить класс на составные.
Ответ написан
Комментировать
@bigsnake
Ссылка используется что бы не создавать копию глобального объекта, хотя оптимизатор пыхи и так её не создаст если объект глобальный не был изменён
Ответ написан
Комментировать
@Vasiliy_M
лучше забудь про GLOBAL и пиши код так,как будто их нет в языке
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы