Как соединить методы вывода и методы сортировки? Необходимо этоforeach($product_collection->getAll() as $v){
//...
}
заменить наforeach($product_collection->getAll()->sortByName() as $v){
//...
}
Никак не разберусь, как такую конструкцию реализовать внутри объекта.
Метод getAll() возвращает все объекты, а сортировка по задумке должна применяться к полученным объетам.
На ум пришло только$product_collection->getData()->sortByName()->getAllObj();
//или
$product_collection->sortByName()->getAll();
А как сделать на моём примере?

21 Авг 2019 в 06:58
191 +1
0
Ответы
1

Для реализации данной конструкции внутри объекта можно использовать цепочку вызовов методов. Например, вы можете создать метод sortByName() внутри объекта $product_collection, который будет сортировать объекты по имени, а затем возвращать сам объект для дальнейшего цепочного вызова других методов.

Пример реализации:

class ProductCollection {
private $data;
public function __construct($data) {
$this->data = $data;
}
public function getAll() {
return $this->data;
}
public function sortByName() {
usort($this->data, function($a, $b) {
return strcmp($a->getName(), $b->getName());
});
return $this;
}
}
// Использование
$product_collection = new ProductCollection([...]); // передаем массив объектов
foreach($product_collection->sortByName()->getAll() as $v){
//...
}

В данном примере метод sortByName() сортирует объекты в коллекции по имени и возвращает сам объект $product_collection для возможности дальнейших вызовов методов. После сортировки мы вызываем метод getAll(), который возвращает отсортированные объекты для использования в цикле foreach.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир