За последние 24 часа нас посетили 23106 программистов и 1634 робота. Сейчас ищут 1072 программиста ...

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

Тема в разделе "PHP для новичков", создана пользователем Forward5, 5 фев 2021.

  1. Forward5

    Forward5 Новичок

    С нами с:
    5 фев 2021
    Сообщения:
    11
    Симпатии:
    0
    Добрый день!
    Локальный проект, задача хранить настройки для доступа к клиентам (их мало, поэтому хочу прописать в коде руками).

    Имя клиента - 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
    поэтому спрашиваю как это правильно оформить?
     
    #1 Forward5, 5 фев 2021
    Последнее редактирование: 5 фев 2021
  2. Forward5

    Forward5 Новичок

    С нами с:
    5 фев 2021
    Сообщения:
    11
    Симпатии:
    0
    с NULL разобрался, осталось понять как оформить объект правильно, чтобы не было предупреждений
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.795
    Симпатии:
    1.331
    Адрес:
    Лень
    зачем тебе объекты когда данные уже в массиве ?
     
  4. Forward5

    Forward5 Новичок

    С нами с:
    5 фев 2021
    Сообщения:
    11
    Симпатии:
    0
    Просто так код лучше выглядит и удобнее обращаться местами;
    данный момент пока остановился на таком варианте, но бесят предпреждения.
    Как это правильно, красиво оформить?
    код 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. }
     
    #4 Forward5, 5 фев 2021
    Последнее редактирование: 5 фев 2021
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.795
    Симпатии:
    1.331
    Адрес:
    Лень
    у тебя код не рабочий
    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;
     
    #5 MouseZver, 5 фев 2021
    Последнее редактирование: 5 фев 2021
  6. AlexProg

    AlexProg Активный пользователь

    С нами с:
    13 май 2014
    Сообщения:
    320
    Симпатии:
    7
    Trait вам нужен, что бы вызвать настройки в любом месте.
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.795
    Симпатии:
    1.331
    Адрес:
    Лень
    o_O