Туплю: как правильо оформить класс для хранения настроек

Forward5

Добрый день!
Локальный проект, задача хранить настройки для доступа к клиентам (их мало, поэтому хочу прописать в коде руками).

Имя клиента — Id гугл таблицы

Так чтобы я мог обратиться к конкретному имени клиента и получить его ID и другие свойства. Или же перебрать все имена через foreach

можно сделать массив:
$clients=array(‘Клиент1’=>[‘ID таблицы=>’sdfsadfkwwef23’, ‘Другое свойство’=>’значение’],
‘Клиент2’=>[‘ID таблицы=>’sdfsadfksdf3wwef2343’, ‘Другое свойство’=>’значение’],
.
.
);

Но мне хочется оформить это как объект, чтобы я мог обращаться таким образом:
$clients->Клиент1->IDтаблицы
$clients->Клиент2->IDтаблицы
$clients->Клиент2->ДругоеСвойство ит.п.

например используя
$client=’Клиент1′;
$tableId=$clients->$client->IDтаблицы;

Нашел руководство по классам, сделал так:
Class Clients{
public $name;
public $tableID;
}
$clients=new Clients;

И дальше завис… по такой логике получается надо делать для каждого клиента экземпляр и обращаться к ним:
$ClientName1->name
$ClientName1->tableID
$ClientName2->name и т.п. это бред..

Как сделать чтобы все было в одном объекте и обращатся как я написал:
$clients->ИМЯ_Клиента->Свойства клиента

Туплю, не понимаю.. помогите плиз, раньше только массивы использовать

Еще пробовал заполнить так:
$clients=new stdClass();
$clients->Клиент1->TableId=’1izUdVdD12S8Vc9fclw7DDx4′;
$clients->Клиент2->TableId=’1izUdVdD12S8Vc9fclwF-1QaU6ABh5E7DDx4′;

Работает, но выдает предупреждение Creating default object from empty value,
и кроме того не получается обратиться к нужному клиенту используя строковую переменную как указал выше:
$client=’Клиент1′;
$tableId=$clients->$client->TableId;
выводит NUL
поэтому спрашиваю как это правильно оформить?

 

Forward5

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

 

MouseZver

зачем тебе объекты когда данные уже в массиве ?

 

Forward5

Просто так код лучше выглядит и удобнее обращаться местами;
данный момент пока остановился на таком варианте, но бесят предпреждения.
Как это правильно, красиво оформить?
код settings.php вызывается через консоль с параметром=имя клиента

PHP:
  1. /**настройки клиентов**//
  2. $clients=new stdClass(); //статический класс клиентов
  3. $clients->Google->dictionaryTableId=‘1izUdVdD12SMOY-1QaU6ABh5E7DDx4’; //таблица
  4. $clients->Nike->dictionaryTableId=‘1izUdVdD12S8Vc9OY-1QaU6ABh5E7DDx4’;
  5.  
  6. Class Client{ //конкретный клиент динамические свойства
  7.     public $name;
  8.     public $dictionaryTableId;
  9.     public $dictionarySheetList;
  10. }
  11.  
  12. $client=new Client; //Текущий клиент
  13. $client->name=ThisClient($argv);
  14. $client->dictionaryTableId=$clients->{$client->name}->dictionaryTableId;
  15.  
  16. //***//
  17.  
  18.  
  19. function ThisClient($argv){ //читаем 1й параметр запуска и определяем текущего клиента
  20.     global $clients;
  21.     if (isset($argv[1])){
  22.         if(isset($clients->{$argv[1]})){ //если передан параметр и он существует в списке клиентов устанавливаем значение
  23.             $client=$argv[1];
  24.             return $client;
  25.         }
  26.     }
  27.     return $client=‘Google’; //значение по умолчанию временн
  28.    
  29. }
 

MouseZver

у тебя код не рабочий

PHP:
  1. <?php
  2.  
  3. $name = ‘Google’;
  4.  
  5. $array = [
  6.   ‘Google’ => [ ‘dictionaryTableId’ => ‘1izUdVdD12SMOY-1QaU6ABh5E7DDx4’ ],
  7.   ‘Nike’ => [ ‘dictionaryTableId’ => ‘1izUdVdD12S8Vc9OY-1QaU6ABh5E7DDx4’ ],
  8. ];
  9.  
  10. $array[‘name’] = $name;
  11.  
  12. $array[‘dictionaryTableId’] = $array[$name][‘dictionaryTableId’] ?? $array[‘Google’][‘dictionaryTableId’];
  13.  
  14. /* … */
  15.  
  16. $client = json_decode ( json_encode ( $array ) );
  17.  
  18. echo $client -> dictionaryTableId;
 

AlexProg

Trait вам нужен, что бы вызвать настройки в любом месте.

 

MouseZver

o_O

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *