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
Если это будет класс, нужно ли в данном случае использовать конструктор?

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

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

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