Классы, объекты, шаблоны — как правильно!? Вот дошел до изучения ООП, немного поплыл...
Вот например у меня есть массив, который может состоять из числа, строки или содержать вложения массивов.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_dumpint(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 клиентов все работает... Вот хочется собрать все в кучу и чтоб читалось )) Я не прошу писать за меня, я прошу пояснить где и что в моем случае правильней использовать, а я уж почитаю как это едят %)

21 Авг 2019 в 06:58
249 +1
0
Ответы
1

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

Примерно так:

class Config {
private $settings;
private $cargo;
public function __construct(array $config) {
$this->settings = $config['sett'];
$this->cargo = $config['cargo'];
}
public function getSettings() {
return $this->settings;
}
public function getCargo() {
return $this->cargo;
}
}

Затем вы можете использовать этот класс для создания объекта конфигурации и передачи его в классы API клиентов:

$config = new Config($cfg);
$client1 = new APIClient1($config);
$client2 = new APIClient2($config);

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

Однако, если у вас возникнут дополнительные требования по использованию конфигурации, вы можете рассмотреть возможность применения таких паттернов как Singleton или Factory, но в данном случае, скорее всего, это необязательно.

Надеюсь, это поможет вам разобраться с тем, как правильно структурировать ваш код с использованием ООП принципов. Важно помнить, что наиболее важно следовать принципам единообразия и читаемости кода.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир