[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос новичка о глобальных переменных!
dreadboy
как только кто-то видит в каком-то чужом PHP коде глобальные переменные — сразу же начинается кладка кирпечей и предложения вместо global-ных переменных использовать объект класса построенного по шаблону singleton.
т.е. например вместо:

functions.php
function loadModule($moduleName) {

global $_CONFIG
include $moduleFile; // тут уже подготовленное очень безопасное значение, сейчас речь не об этом
}


index.php
$_CONFIG = array({тут заполняем массив});
loadModule('curModule');


curModule.php
echo $_CONFIG['hello']['world'];


предлагают использовать:

functions.php
class Config {
//тут объявляем всё как надо
}
function loadModule($moduleName) {

include $moduleFile; // тут уже подготовленное очень безопасное значение, сейчас речь не об этом
}



index.php
$_config = Config::getInstance();
$_config->data = array({тут заполняем массив});
loadModule('curModule');



curModule.php
$_config = Config::getInstance();
echo $_config->data['hello']['world'];


— Собственно и интересует, почему PHP-общественность так против первого способа и так за второй?

Пинать буду исключительно за неумение оформлять свои посты и пользоваться bb-кодами.



Спустя 26 минут, 26 секунд (10.09.2010 - 10:59) linker написал(а):
Глобальные переменные - это зло, они снижают читабельность и увеличивают количество трудно находимых ошибок.

Спустя 9 минут, 50 секунд (10.09.2010 - 11:09) dreadboy написал(а):
т.е. пример №1 менее читабельный, чем пример №2?

Спустя 4 минуты (10.09.2010 - 11:13) dreadboy написал(а):
и производительстоть тоже интересует

Спустя 5 минут, 6 секунд (10.09.2010 - 11:18) Nord написал(а):
По-моему, создавать класс просто для того, чтобы хранить массив, бессмысленно и не эффективно.

И так и да, второй вариант ничуть не лучше читается, чем первый.
Почему, например, hello не свойство класса?

Спустя 1 час, 28 минут, 9 секунд (10.09.2010 - 12:46) vasa_c написал(а):
Когда у вас 10 строчек, тогда всё равно как читается.
Когда 10 000, тогда уже зае...сь.
А когда у вас 10 000, у Васи за соседнем столом 10 000 и у Пети 10 000 и у каждого глобальные переменные и вам всё это собрать нужно вместе, тогда уже всю эту прелесть почувствуете полностью.

Спустя 32 минуты, 39 секунд (10.09.2010 - 13:19) twin написал(а):
Глобальные переменные, это вовсе не зло. Просто нужно уметь их готовить. smile.gif
Разумеется, пихать все и вся в глобальное пространство никак не можно. И дело тут не в читабельности. Она то как раз лучше, чем у синглетона.
Дело в том, что отловить ошибку, если эта переменная переопределилась где то в дебрях программы очень сложно. О чем и сказали.

Однако в приведенном примере синглетон этот, что корове седло. Корва с седлом никак ахалкетинцем не станет. А по большому счету смотрится даже смешно.

Дело в том, что данные, находящиеся в конфигурационном массиве, в остальных скриптах должны априори иметь статус readonly. Если массив обозначен как $_CONFIG к примеру, то апать его за пределами конфиги - табу. И тогда ничего страшного в глобальных переменных не будет.

Если не доверяешь Васе за соседним столом (или себе), то тогда да. Нужно страховаться.

Спустя 41 минута, 55 секунд (10.09.2010 - 14:01) linker написал(а):
Хранение конфига в классе хорошо тем, что физическое место хранения данных можно поменять не прибегая к всеобщему и тотальному рефакторингу. Я бы весь конфига хранил бы в статическом поле класса, всегда и везде можно не парится и писать ClassConfig::Config['ShowTitle'], что само по себе уже глобально.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.