т.е. например вместо:
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 не свойство класса?
И так и да, второй вариант ничуть не лучше читается, чем первый.
Почему, например, hello не свойство класса?
Спустя 1 час, 28 минут, 9 секунд (10.09.2010 - 12:46) vasa_c написал(а):
Когда у вас 10 строчек, тогда всё равно как читается.
Когда 10 000, тогда уже зае...сь.
А когда у вас 10 000, у Васи за соседнем столом 10 000 и у Пети 10 000 и у каждого глобальные переменные и вам всё это собрать нужно вместе, тогда уже всю эту прелесть почувствуете полностью.
Когда 10 000, тогда уже зае...сь.
А когда у вас 10 000, у Васи за соседнем столом 10 000 и у Пети 10 000 и у каждого глобальные переменные и вам всё это собрать нужно вместе, тогда уже всю эту прелесть почувствуете полностью.
Спустя 32 минуты, 39 секунд (10.09.2010 - 13:19) twin написал(а):
Глобальные переменные, это вовсе не зло. Просто нужно уметь их готовить.
Разумеется, пихать все и вся в глобальное пространство никак не можно. И дело тут не в читабельности. Она то как раз лучше, чем у синглетона.
Дело в том, что отловить ошибку, если эта переменная переопределилась где то в дебрях программы очень сложно. О чем и сказали.
Однако в приведенном примере синглетон этот, что корове седло. Корва с седлом никак ахалкетинцем не станет. А по большому счету смотрится даже смешно.
Дело в том, что данные, находящиеся в конфигурационном массиве, в остальных скриптах должны априори иметь статус readonly. Если массив обозначен как $_CONFIG к примеру, то апать его за пределами конфиги - табу. И тогда ничего страшного в глобальных переменных не будет.
Если не доверяешь Васе за соседним столом (или себе), то тогда да. Нужно страховаться.
Разумеется, пихать все и вся в глобальное пространство никак не можно. И дело тут не в читабельности. Она то как раз лучше, чем у синглетона.
Дело в том, что отловить ошибку, если эта переменная переопределилась где то в дебрях программы очень сложно. О чем и сказали.
Однако в приведенном примере синглетон этот, что корове седло. Корва с седлом никак ахалкетинцем не станет. А по большому счету смотрится даже смешно.
Дело в том, что данные, находящиеся в конфигурационном массиве, в остальных скриптах должны априори иметь статус readonly. Если массив обозначен как $_CONFIG к примеру, то апать его за пределами конфиги - табу. И тогда ничего страшного в глобальных переменных не будет.
Если не доверяешь Васе за соседним столом (или себе), то тогда да. Нужно страховаться.
Спустя 41 минута, 55 секунд (10.09.2010 - 14:01) linker написал(а):
Хранение конфига в классе хорошо тем, что физическое место хранения данных можно поменять не прибегая к всеобщему и тотальному рефакторингу. Я бы весь конфига хранил бы в статическом поле класса, всегда и везде можно не парится и писать ClassConfig::Config['ShowTitle'], что само по себе уже глобально.