Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вынести поле за пределы класса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Поле повторяется при создании нового объекта
headshot
Отправлено: 11 Мая, 2017 - 10:35:21
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Здравствуйте!
Суть проблемы такова:

Есть класс описывающий Товар интернет магазина:
PHP:
скопировать код в буфер обмена
  1. class Item
  2. {
  3.     protected $api_token;
  4.  
  5.     protected $id;
  6.     protected $name;
  7.     protected $description;
  8.     protected $category;
  9.     protected $price;
  10.     protected $photo;
  11.  
  12.  
  13.     public function __construct($api_token, $item = [])
  14.     {
  15.         $this->api_token = $api_token;
  16.  
  17.         if (!empty($item)) {
  18.             foreach ($item as $key => $value) {
  19.                 $this->$key = $value;
  20.             }
  21.         }
  22.     }
  23.  
  24.     public function getById(...$items)
  25.     {
  26.         if (!empty($items)) {
  27.             $obj = [];
  28.  
  29.             $params = [
  30.                 'ids' => implode(',', $items),
  31.                 'api_token' => $this->api_token
  32.             ];
  33.  
  34.             $query = urldecode(http_build_query($params));
  35.             $result = file_get_contents('https://example-shop.com/api/' . 'getById?' . $query);
  36.             $result = json_decode($result, true);
  37.  
  38.             foreach ($result['items'] as $item) {
  39.                 $info = [
  40.                     'id' => $item['id'],
  41.                     'name' => $item['name'],
  42.                     'description' => $item['description'],
  43.                     'category' => $item['category'],
  44.                     'price' => $item['price'],
  45.                     'photo' => $item['photo'],
  46.                 ];
  47.  
  48.                 $obj[] = new Item($this->api_token, $info);
  49.             }
  50.  
  51.             return $obj;
  52.         } else {
  53.             return null;
  54.         }
  55.     }
  56.  
  57.     public function save()
  58.     {
  59.         if (!empty($this->id)) {
  60.             $params = [
  61.                 'name' => $this->name,
  62.                 'description' => $this->description,
  63.                 'category' => $this->category,
  64.                 'price' => $this->price,
  65.                 'photo' => $this->photo,
  66.                 'api_token' => $this->api_token
  67.             ];
  68.  
  69.             $query = urldecode(http_build_query($params));
  70.             $result = file_get_contents('https://example-shop.com/api/' . 'addItem?' . $query);
  71.         } else {
  72.             $params = [
  73.                 'id' => $this->id,
  74.                 'name' => $this->name,
  75.                 'description' => $this->description,
  76.                 'category' => $this->category,
  77.                 'price' => $this->price,
  78.                 'photo' => $this->photo,
  79.                 'api_token' => $this->api_token
  80.             ];
  81.  
  82.             $query = urldecode(http_build_query($params));
  83.             $result = file_get_contents('https://example-shop.com/api/' . 'updateItem?' . $query);
  84.         }
  85.       $result = json_decode($result, true);
  86.  
  87.       return $result['result'];
  88.     }
  89. }


Суть такова, могу ли я как то вынести поле $api_token за пределы класса, поскольку у меня $api_token - используется в каждом методе класса (для запроса к https://example-shop.com/api/), а хотелось бы использовать статические методы (public static function getById()), потому что как то не красиво получается, что бы получить объект товара - нужно создать объект..
Хотя еще есть метод в этом классе save() - который либо сохраняет новый товар (если нету у него id), либо обновляет его (если есть id) - эти методы уже относятся к объекту..

(Отредактировано автором: 11 Мая, 2017 - 10:40:39)

 
 Top
Мелкий Супермодератор
Отправлено: 11 Мая, 2017 - 10:41:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Паттерн "репозиторий"
Отдельный класс репозитория, который управляет получением и сохранением объекта или списка объектов сущности и класс сущности, который не заботится ни о каких методах чтения и сохранения себя.


-----
PostgreSQL DBA
 
 Top
headshot
Отправлено: 11 Мая, 2017 - 11:08:31
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Май 2017  


Помог: 0 раз(а)




Мелкий пишет:
Паттерн "репозиторий"
Отдельный класс репозитория, который управляет получением и сохранением объекта или списка объектов сущности и класс сущности, который не заботится ни о каких методах чтения и сохранения себя.


Спасибо Вам за то что обратили внимание на мою тему, пошел читать Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB