Собственно есть задача, создать объект со вложенной коллекций объектов tickets. Но что это такое?
Вот есть объект со вложенным объектом tickets:
stdClass Object
(
[email] => asd@asd.ru
[phone] => +79243000155
[tickets] => stdClass Object
(
[ticketType] => Adult
[person] => Array
(
[fullName] => Хабраков Иван Иванович
[FirstName] => Иван
)
)
)
tickets
нужно представить в виде коллекции объектов. А как он должен выглядеть и, соответственно, создаваться?
Скорей всего в задаче подразумевается использовать это: https://ru.wikipedia.org/wiki/Коллекция_(программирование)
Можете реализовать свою коллекцию по интерфейсу: http://php.net/manual/ru/class.ds-collection.php
Collection Данный интерфейс предназначен для описания базовых функций работы с множеством объектов. Он наследует интерфейсы Countable и Iterable, что позволяет получать количество объектов в коллекции и выполнять обход и применение пользовательской функции для каждого объекта коллекции. Интерфейс коллекции подразумевает, что в коллекции находятся объекты одного типа.
В вашем случае больше всего подойдёт реализация коллекции наборы.
Реализации наборов Наборы представлены единственной реализацией UniqueStore. Объекты в хранилище UniqueStore. Уникальность объектов обеспечивается за счет метода getIdentity(), который возвращает идентификаторы объектов. В хранилище UniqueStore не могут присутствовать несколько объектов с одинаковыми идентификаторами. Внутренняя структура хранилища уникальных объектов UniqueStore построена на основе ассоциативных связей между объектами и их идентификаторами. Это дает возможность реализовывать все операции хранилища с помощью ассоциативных выборок, что очень сильно повышает скорость его работы. Сложность работы алгоритмов хранилища уникальных объектов равна O(1), что означает, что время установки/получения объектов не изменяется в зависимости от размера хранилища. Хранилище уникальных объектов UniqueStore поддерживает любые типы данных для значений.
Примеры использования набора:
namespace Rmk\Collection;
use \UnexpectedValueException as UnexpectedValueException;
use \InvalidArgumentException as InvalidArgumentException;
use \stdClass as stdClass;
include '../../bootstrap.php';
$set = new UniqueStore('stdClass');
$obj1 = new stdClass();
$obj2 = new stdClass();
$obj3 = new stdClass();
// Добавление объектов в хранилище.
$set->add($obj1);
$set->add($obj2);
$set->add($obj3);
// Повторно объекты в хранилище добавлены не будут.
$set->add($obj3);
try {
$set->add(new UnexpectedValueException);
} catch (InvalidArgumentException $exc) {
echo 'Значение не подходит по типу.';
}
// Обход хранилища.
$set->each(function($value, $thisSet) {
/**
* @TODO: Обработка хранилища.
*/
}
);
// Удаление объектов из хранилища.
$set->remove($obj1);
$set->remove($obj2);
$set->remove($obj3);
// Преобразование в массив.
$array = $set->toArray();
Источник: https://habrahabr.ru/post/144182/
Возможно я буду не прав, и где то поторопился, но почему не сделать коллекцию например так ?
Я не отрицаю, что сейчас здесь мало методов, еще можно добавить поиск по билетам и еще возможно что-то, но задача задать вектор мышления.
<?php
Class Ticket {
protected $ticketType;
protected $person;
public function __construct($ticketType,$person) {
$this->ticketType = $ticketType;
$this->person = $person;
}
}
Class Collection implements Iterator, Countable {
private $tickets = array();
private $position;
public function __construct(){
$this->position = 0;
}
//Добавить элемент в массив
public function push($ticket) {
if($ticket instanceof Ticket === false) {
throw new InvalidArgumentException('Попытка добавить не верный тип');
}
array_push($this->tickets,$ticket);
}
//Взять последний добавленный
public function pop() {
array_prop($this->tickets,$ticket);
}
//Ниже Методы для реализации интерфейса Iterator
function rewind() {
$this->position = 0;
}
function current() {
return $this->tickets[$this->position];
}
function key() {
return $this->position;
}
function next() {
++$this->position;
}
function valid() {
return isset($this->tickets[$this->position]);
}
function count(){
return count($this->tickets);
}
}
$ticketJhon = new Ticket('emptyTicket',"John");
$ticketJane = new Ticket('emptyTicket',"Jane");
$collection = new Collection();
$collection->push($ticketJhon);
$collection->push($ticketJane);
foreach($collection as $ticket) {
print_r($ticket);
}
$ticketStr = 'Не билет';
$collection->push($ticketStr);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Отправляю данные серверу для обновления с помощью метода PUTДанные отправляю с помощью FormData
При загрузке шаблона smarty в DOMDocument и последующей выгрузке через saveHTML, появляются нежелательные теги <p> в начале и в конце контентаТакже...
В базе хранятся данные о времени работы компании в формате: 09:00,18:30; 12:00,02:00 и тд
Начал открывать для себя symfony2Решил прикрутить oAuth2 (FOSOAuthServerBundle), сделал всё по доке