Тема о CMS (размышления об изъезженном)

HraKK

Мудак
Команда форума
1. программист должен осознавать что делает и как делает.
2. Я говорю про константы для важнейших данных, которые определяются еще в логике
1. Он один делает проект из разряда сделал сдал забыл? Тогда пиши как хочешь.
2. Константы они и в африке константы их МЕНЯТЬ нельзя. Значит они не имеют этого минуса, а если вместо констант используют глобалс, то их можно поменять где-то и заложить такую логику, а другие будут потом матерится. Или кто то другой поменяет, а первые будут матерится.
 

igortik

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

Понял твою мысль, в твоем примере мы можем переназначить статус авторизации или прочие важные данные.

Я в данном случае прибегаю к реализации класса по второму твоему примеру, не разделяя определение важнейших данных на 2 метода.

P.S. Таки-да, Вы правы господа. Если я уже не запинаюсь на таком, это не будет говорить о том, что кто-то не ошибется.
 

igortik

Новичок
1. Он один делает проект из разряда сделал сдал забыл? Тогда пиши как хочешь.
Не верно.
Я очень категоричен к коду.

Логично, что если есть ядро, в которое по определению никто не должен совать свой нос, то там я допускаю global от части, но вот в примере с модулями - соглашусь.
 

HraKK

Мудак
Команда форума
Приведи пример когда ты global допускаешь.

И даже если ты не допускаешь (хотя скорее всего это ты так думаешь) то далеко не факт что другой такое не допустит. А все что не запрещено = разрешено.

Совет тебе такой, попиши юнит тесты на свои классы, сразу столько зависимостей найдешь.
 

igortik

Новичок
HraKK
Допустим, нам надо сначала собрать базовый массив критически важных данных

PHP:
class logic
{		
	public function __construct()
	{
		// Set of minimal needed system data
		$this->data = array();
		$this->data['query_string'] = NULL;
		$this->data['ajax'] = false;
		$this->data['lang'] = 'ru';
		$this->data['application'] = 'site';
		$this->data['module'] = 'pages';		
		$this->data['filter'] = NULL;
		$this->data['page'] = false;
		
		$this->data_index = 0;
		
		$this->path = trim($_GET['path']);
		$this->url_parts = explode('/',$this->path);		
		$this->count_url_parts = count($this->url_parts);
        }
}
Для этого примера в конструктор я подумываю добавить ссылку на массив $sys_config, который будет кормить некоторые данные, например:

PHP:
$sys_config['apps'] = array('site'=>'site (fontend)','adm'=>'control panel (backend)');
И вот вопрос, стоит ли его отдавать как аргумент или достаточно объявить оператором global $sys_config;

Ведь далее будет:

PHP:
$application = $this->url_parts[0];
if(!array_key_exists($application,$sys_config['apps']))		
   $application = 'site'; // :TODO: data with the first key
else
   $this->data_index++;
		
define('_APPLICATION',$application); // _APPLICATION
Очевидно, что массив $sys_config лишь читается и ВСЕ!

Такой же пример и на практике для ф-ии mod(_MODULE,_ACTION); внутри кторой глобалом подтягиваются более 7 массивов и переменных исключительно для чтения и выполнения своей локальной конечной функции.
 

Sokil.Dmytro

Новичок
а если ктото сдуру не зная о существовании твоей глобальной переменной определит в каком нибуть своем модуле такую же глобальную?
Что тогда получит твой код?
Да и самому можно забыть, пол года писал код, фиг сапомнишь что и где. Через пол года дописал функционал, обозвал другую глобальную так же? Такой подход принуждает всегда отслеживать не заехал ли ты на чужую территорию

Каждый модуль, блок, плагин или еще чегото должен в идеале выглядеть как герметичная непрозрачная коробка с парой щупалец для связи с внешним миром
 
  • Like
Реакции: Koc

igortik

Новичок
а если ктото сдуру не зная о существовании твоей глобальной переменной определит в каком нибуть своем модуле такую же глобальную?
эхх... ядро отрабатывает себя задолго до работы с модулями, а уже после определения ВСЕХ критических данных, аутентификации и т.п. переходит к шаблонизатору, который в пассивном режиме вызывает mod(_MODULE,_ACTION), а также mod('somemod','somaction') где это необходимо.

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

Mols

Новичок
igortik
Очень интересно)))
И чем доводSokil.Dmytro
отличается от довода HraKK
"Тем что их можно повсеместно менять." ?
 

igortik

Новичок
igortik
Очень интересно)))
И чем доводSokil.Dmytro
отличается от довода HraKK
"Тем что их можно повсеместно менять." ?
Оба мнения одного и того же характера и основаны на возможностях при объявлении глобальной области видимости.
Но для себя решил следующее - если в конкретном алгоритме не будет допущений для перезаписи данных, то можно вполне обойтись и global $var;
Ну это ИМХО.
 
Сверху