dimastik1986
@dimastik1986
учусь

Классы, объекты, шаблоны — как правильно!?

Вот дошел до изучения ООП, немного поплыл...
Вот например у меня есть массив, который может состоять из числа, строки или содержать вложения массивов.

demo array
(он больше, но структура такая...)
$cfg  =  array ( 
		 
		'sett'	=>		array (				
			'agent'		=>		11,								
			'search'		=>		90,							
			'check'		=>		3,											
			 'crypt'		=>		array (	
				'key'		=>		'XXXXXXXXXXXXXXXXXXX',
				'secret'	=>	        'XXXXXXXXXXXXXXXXXXX'
			)		
		),
		 
		'cargo'		=>		array (
			'JDE'		=>		array (	
				'name'			=>		'XXXXXXXXXXXXXXXXXXX',		
				'user'			=>		'XXXXXXXXXXXXXXXXXXX',	
				'token'			=>		'XXXXXXXXXXXXXXXXXXX',	
				'login'			=>		'XXXXXXXXXXXXXXXXXXX',	
				'pass'			=>		'XXXXXXXXXXXXXXXXXXX'	
			),	
			 
			'DL'			=>		array (
				'name'			=>		'XXXXXXXXXXXXXXXXXXX',		
				'user'			=>		'XXXXXXXXXXXXXXXXXXX',	
				'token'			=>		'XXXXXXXXXXXXXXXXXXX',	
				'login'			=>		'XXXXXXXXXXXXXXXXXXX',	
				'pass'			=>		'XXXXXXXXXXXXXXXXXXX'							
			)
		)
	 );
var_dump
int(90)
["check"] =>
 int(3)
["crypt"] =>
 array(2) {
	["key"] =>
	string(19) "XXXXXXXXXXXXXXXXXXX"
	["secret"] =>
	string(19) "XXXXXXXXXXXXXXXXXXX"
}
}
["cargo"] =>
 array(2) {
	["JDE"] =>
	array(5) {
		["name"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
		["user"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
		["token"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
		["login"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
		["pass"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
	}
	["DL"] =>
	array(5) {
		["name"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
		["user"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
		["token"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
		["login"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
		["pass"] =>
		string(19) "XXXXXXXXXXXXXXXXXXX"
	}
}                                                                                                                                                                                  
}


Это настройки для подключения к разным API для получения информации.
У меня есть готовые два класса клиентов для этих API, один предоставлялся разработчиками, второй я сделал по аналогии.

Я хочу с помощью класса подключать тот или иной клиент, тот в свою очередь должен использовать данные из конфига + получать доп.свойства при вызове.

Я запутался, не понимаю:
  • Как именно я должен хранить данные конфига?!
  • Мне нужно сделать это через класс с ограничением видимости или как-то еще?
  • Если это будет класс, нужно ли в данном случае использовать конструктор?


Почитал про паттерны, стало еще хуже!
  • Нужно использовать синлтон?
  • Если это объект с вложениями, то надо делать пул?


Т.е. у меня просто все это сейчас перепуталось и я не понимаю как правильно... Хочу сделать как положено, а не как хочется ))) Так-то сейчас на массивах в перемешку с объектами и отдельно живущих двух классов API клиентов все работает... Вот хочется собрать все в кучу и чтоб читалось )) Я не прошу писать за меня, я прошу пояснить где и что в моем случае правильней использовать, а я уж почитаю как это едят %)
  • Вопрос задан
  • 1102 просмотра
Решения вопроса 2
Konata69lol
@Konata69lol
backend developer (php/go)
Как именно я должен хранить данные конфига?!

Можно так в отдельном файле:
return [
   //тут конфиг
]

Потом этот файл подключать туда, где требуется конфиг.

Мне нужно сделать это через класс с ограничением видимости или как-то еще

Нет, т.к. в конфиге лежат критичные данные, которые не заносят под гит.

P.s. вместо array() используйте []
Ответ написан
Adamos
@Adamos
Как именно я должен хранить данные конфига?!

Смотрите. У вас есть конфиг, есть классы, которым нужно получить данные этого конфига.
Как именно он хранится - эти классы не знают и знать не желают.
Потому что вы сделали класс конфига, у которого есть внешние функции "получить нужные данные" и внутренний механизм, который реально берет их оттуда, где они хранятся. Это же ООП.
Мне нужно сделать это через класс с ограничением видимости или как-то еще?

Да, внутренняя часть делается через ограничение protected / private
Если это будет класс, нужно ли в данном случае использовать конструктор?

Если данные, например, хранятся в базе и один раз считываются из нее в кэш, из которого уже и отдаются по каждому запросу - логично сделать это в конструкторе. Если у вас просто простыня РНР-массива, обращение к которому ничего не стоит - он может быть статикой, и методы тоже. Но лучше сразу предполагать, что все может измениться и сделать пустой конструктор и нестатические методы даже в этом случае. Чтобы потом не переписывать те классы, которые обращаются за данными.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы