Задать вопрос
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 клиентов все работает... Вот хочется собрать все в кучу и чтоб читалось )) Я не прошу писать за меня, я прошу пояснить где и что в моем случае правильней использовать, а я уж почитаю как это едят %)
  • Вопрос задан
  • 1107 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 2
Konata69lol
@Konata69lol
backend developer (php/go)
Как именно я должен хранить данные конфига?!

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

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

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

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

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

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

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

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽