DEV Community

oskar calvo
oskar calvo

Posted on

PHP 8.5 nos trae closures en constantes de clases.

La verdad es que esta nueva funcionalidad me deja frío, y es añadir una constante que puede ejecutar una función anónima no termina de convencerme.

class Example {
    public const VALIDATOR = static function($value) {
        return !empty($value);
    };
}
Enter fullscreen mode Exit fullscreen mode

(fuente del código: https://pixicstudio.medium.com/php-8-5-new-developer-features-f9617311c590)
Para resolver eso mismo podemos crear un functor o podemos usar también un trait, o incluso una clase con un método estático (pero mejor los traits).

Un functor al ser una clase se puede inyectar sin problemas en otras clases y un trait está precisamente pensado para ser usado dentro de otras clases.

interface Functor
{
    public function fmap(callable $fn): Functor
}
Enter fullscreen mode Exit fullscreen mode
class Arr implements Functor
{
    protected $items;

    public function __construct(array $items)
    {
        $this->items = $items;
    }

    public function fmap(callable $fn): Functor
    {
        return new static(array_map($fn, $this->items));
    }
}
Enter fullscreen mode Exit fullscreen mode

(fuente del código: https://www.kai-sassnowski.com/post/php-functors-1/)

Un functor o un servicio normal los plantearía en caso de que sea necesario conectar con la capa de Infraestructura (acceso a bbdd, a servicios externos de terceros, etc.), un trait por otro lado lo implementaría en caso de que correspondiere a la capa de Dominio para manipular datos pero es que no veo en que momento sería buena idea o interesante añadir una función anónima a una constante.

Así que lo dicho, no veo en qué momento sería buena idea añadir una función anónima a una constante.

Top comments (0)