Même avec PHP, j'aime bien trouver des solutions à mes problèmes de santé. fonctionnel solutions. Ainsi, par exemple, la réponse donnée par @migli est vraiment bonne, très flexible et élégante.
Mais il y a un problème : que se passe-t-il si vous devez valider un grand nombre de chaînes DateTime ayant le même format ? Vous devriez répéter le format partout, ce qui va à l'encontre de la norme SEC principe. Nous pourrions placer le format dans une constante, mais nous devrions quand même passer la constante comme argument à chaque appel de fonction.
Mais ne craignez plus rien ! Nous pouvons utiliser curry à notre secours ! PHP ne rend pas cette tâche agréable, mais il est tout de même possible d'implémenter le curry avec PHP :
<?php
function validateDateTime($format)
{
return function($dateStr) use ($format) {
$date = DateTime::createFromFormat($format, $dateStr);
return $date && $date->format($format) === $dateStr;
};
}
Alors, qu'est-ce qu'on vient de faire ? Nous avons enveloppé le corps de la fonction dans un anonyme et renvoyé cette fonction à la place. Nous pouvons appeler la fonction de validation comme suit :
validateDateTime('Y-m-d H:i:s')('2017-02-06 17:07:11'); // true
Oui, il n'y a pas de grande différence... mais la vraie puissance vient de la fonction partiellement appliquée Le curry permet d'obtenir des résultats très satisfaisants :
// Get a partially applied function
$validate = validateDateTime('Y-m-d H:i:s');
// Now you can use it everywhere, without repeating the format!
$validate('2017-02-06 17:09:31'); // true
$validate('1999-03-31 07:07:07'); // true
$validate('13-2-4 3:2:45'); // false
Programmation fonctionnelle FTW !