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 :: Зачем нужны объекты? О_о [2]

 PHP.SU

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


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

> Описание: не кидайте камнями ) Лучше помогите изменить мышление
Zerrata
Отправлено: 22 Ноября, 2013 - 09:41:58
Post Id



Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Июль 2013  


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




Цитата:
Только вместо прямого вывода в браузер идет return. А контроллер отдает ети данные во вюху, которая и делает echo

Совершенно верно. Но Вы обратите внимание на комментарий:

Цитата:

// здесь правильней было бы вызвать вид для показа статьи,
// но я решила чуть схалтурить для упрощения кода


Конечно правильней было бы отдать во вьювер либо сразу массив
PHP:
скопировать код в буфер обмена
  1.  
  2. $news=$model->getArticle();
  3. $view=new View();
  4. $view->showArticle($news);
  5.  

либо уже по частям
PHP:
скопировать код в буфер обмена
  1. $news=$model->getArticle(); // получаем из базы статью
  2.         $this->author=$news['author'];
  3.         $this->content=$news['content'];
  4.         $view=new View();
  5.         $view->showArticle($this->author,$this->content);
  6.  

Честно говоря сама не знаю как лучше / правильней.....
 
 Top
caballero
Отправлено: 22 Ноября, 2013 - 10:28:14
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




Цитата:
Конечно правильней было бы отдать во вьювер либо сразу массив

Цитата:
Честно говоря сама не знаю как лучше / правильней.

вы уж определитесь.

Правильней - если функция showArticle()
сама вызовет $news=$model->getArticle()


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Stierus Супермодератор
Отправлено: 26 Ноября, 2013 - 14:37:30
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




Пример:

У меня в системе есть разные сущности (например, категория и товар) и у меня есть необходимость отправлять их в другую систему. Сам метод отправки можно реализовать хоть на статических методах, хоть на функциях, хоть с объектами, хоть без - это, действительно не сильно важно. А вот для сущностей удобны объекты:

1 мы Создаем либо базовый абстрактный класс, либо интерфейс entity, в котором говорим, что обязательно у сущности должен быть метод toExport() или ExportTo($param) - зависит от нюансов, но роли не играет
2 Все наши сущности мы наследуем от этого абстрактного класса, либо имплементим интерфейс - другими словами говорим о том, что метод, как и обещано, мы реализовали. Таким образом у нас есть 2 класса: category, product которые точно реализовали метод toExport()
3 Реализуем экспортер во внешнюю систему (или несколько, если экспортеров несколько), у которого всего 1 функция export(entity $entityToExport)


Все, у вас есть несколько классов каждый делает свою маленькую часть работы. Как это выглядит в коде:



PHP:
скопировать код в буфер обмена
  1.  
  2. abstract class entity
  3. {
  4.     /**
  5.      * используется при экспорте сущностей во внешние системы
  6.      *
  7.      * @abstract
  8.      * @return string
  9.      */
  10.     public abstract function toExport();
  11.  
  12.     /**
  13.      * используется при экспорте сущностей во внешние системы
  14.      *
  15.      * @abstract
  16.      * @return int|string
  17.      */
  18.     public abstract function getUniqueKey();
  19.  
  20.     /**
  21.      * Принимает на вход список фссоциативных массивов с данными о сущности,
  22.      * возвращает список сущностей (сущности - это те унаследованные классы, из
  23.      * которых вызывается метод)
  24.      *
  25.      * @static
  26.      * @param array $data
  27.      * @return entity[]
  28.      */
  29.     public static function getListFromArray($data){
  30.         $return = array();
  31.         $className = get_called_class();
  32.         foreach($data as $val){
  33.             $return[] = new $className($val);
  34.         }
  35.         return $return;
  36.     }
  37. }
  38.  
  39. class CategoryEntity extends entity
  40. {
  41.     /** @var int */
  42.     private $id = 0;
  43.  
  44.     /** @var string */
  45.     private $name = '';
  46.  
  47.     public function __construct($data=array()){
  48.         if(!is_array($data)){
  49.             return;
  50.         }
  51.         if(array_key_exists('id', $data)){ $this->id = (int)$data['id']; }
  52.         if(array_key_exists('name', $data)){ $this->name = (string)$data['name']; }
  53.     }
  54.  
  55.     public function toExport(){
  56.         $data = array(
  57.           'id' => (int)$this->id,
  58.           'name' => (string)$this->name,
  59.          );
  60.         return json_encode($data);
  61.     }
  62. }
  63.  
  64. $client = ServiceMixHttpClient::getInstance();
  65. $client->send($model->getById((int)$category['id']));
  66.  
 
My status
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB