remove deprecation of BaseCollection::map(), check return type of BaseCollection::map()

This commit is contained in:
Art4 2025-03-12 15:50:24 +00:00
parent a50383836d
commit 268d564930
4 changed files with 50 additions and 36 deletions

View file

@ -83,16 +83,12 @@ class BaseCollection extends \ArrayIterator
/** /**
* Apply a callback function on all elements in the collection and returns a new collection with the updated elements * Apply a callback function on all elements in the collection and returns a new collection with the updated elements
* *
* @deprecated 2025.05 Use `array_map()` instead
*
* @param callable $callback * @param callable $callback
* @return BaseCollection * @return BaseCollection
* @see array_map() * @see array_map()
*/ */
public function map(callable $callback): BaseCollection public function map(callable $callback): BaseCollection
{ {
@trigger_error('`' . __METHOD__ . '()` is deprecated since 2025.05 and will be removed after 5 months, use `array_map()` instead.', E_USER_DEPRECATED);
$class = get_class($this); $class = get_class($this);
return new $class(array_map($callback, $this->getArrayCopy()), $this->getTotalCount()); return new $class(array_map($callback, $this->getArrayCopy()), $this->getTotalCount());

View file

@ -19,33 +19,38 @@ class Notifications extends BaseCollection
public function setSeen(): Notifications public function setSeen(): Notifications
{ {
$class = get_class($this); $notifications = $this->map(function (NotificationEntity $notification) {
$notification->setSeen();
});
return new $class( if (!$notifications instanceof Notifications) {
array_map( // Show the possible error explicitly
function (NotificationEntity $notification) { throw new \Exception(sprintf(
$notification->setSeen(); 'BaseCollection::map() should return instance of %s, but returns %s instead.',
}, Notifications::class,
$this->getArrayCopy() get_class($notifications),
), ));
$this->getTotalCount(), }
);
return $notifications;
} }
public function setDismissed(): Notifications public function setDismissed(): Notifications
{ {
$class = get_class($this); $notifications = $this->map(function (NotificationEntity $notification) {
$notification->setDismissed();
});
return new $class( if (!$notifications instanceof Notifications) {
array_map( // Show the possible error explicitly
function (NotificationEntity $notification) { throw new \Exception(sprintf(
$notification->setDismissed(); 'BaseCollection::map() should return instance of %s, but returns %s instead.',
}, Notifications::class,
$this->getArrayCopy(), get_class($notifications),
), ));
$this->getTotalCount(), }
);
return $notifications;
} }
public function countUnseen(): int public function countUnseen(): int

View file

@ -19,13 +19,19 @@ class Notifies extends BaseCollection
public function setSeen(): Notifies public function setSeen(): Notifies
{ {
$class = get_class($this); $notifies = $this->map(function (NotifyEntity $notify) {
$notify->setSeen();
});
return new $class(array_map( if (!$notifies instanceof Notifies) {
function (NotifyEntity $notify) { // Show the possible error explicitly
$notify->setSeen(); throw new \Exception(sprintf(
}, 'BaseCollection::map() should return instance of %s, but returns %s instead.',
$this->getArrayCopy()), $this->getTotalCount(), Notifies::class,
); get_class($notifies),
));
}
return $notifies;
} }
} }

View file

@ -19,15 +19,22 @@ class ProfileFields extends BaseCollection
public function map(callable $callback): ProfileFields public function map(callable $callback): ProfileFields
{ {
$class = get_class($this); $profileFields = parent::map($callback);
return new $class(array_map($callback, $this->getArrayCopy()), $this->getTotalCount()); if (!$profileFields instanceof ProfileFields) {
// Show the possible error explicitly
throw new \Exception(sprintf(
'BaseCollection::map() should return instance of %s, but returns %s instead.',
ProfileFields::class,
get_class($profileFields),
));
}
return $profileFields;
} }
public function filter(?callable $callback = null, int $flag = 0): ProfileFields public function filter(?callable $callback = null, int $flag = 0): ProfileFields
{ {
$class = get_class($this); return new self(array_filter($this->getArrayCopy(), $callback, $flag));
return new $class(array_filter($this->getArrayCopy(), $callback, $flag));
} }
} }