Bonjour à tous,
J'aurais besoin de votre aide s'il vous plaît?
J’essaie d'implémenter le design pattern chaine de responsabilité pour créer un filtre de simple si la valeur est une chaine on la mets en majuscule sinon on renvoie le double.
Cela fonctionne ma question est que je n'utilise pas le typeint de php7 justement pour pouvoir filtrer sur la bonne classe, comment feriez vous? Mon code peut-être améliorer, avez vous des conseils?
Class abstraite
le filtre pour les majuscules
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?php namespace Exercises\ChainResponsabilityPattern\Complete; abstract class MainFilterAbstract { /** * @var MainFilterAbstract|null */ protected $_successor = null; public function __construct(MainFilterAbstract $successor = null) { $this->_successor = $successor; } abstract public function filter(); }
Pour le double
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <?php namespace Exercises\ChainResponsabilityPattern\Complete; class UpperCaseFilter extends MainFilterAbstract { public function __construct(MainFilterAbstract $filter = null) { parent::__construct($filter); } public function filter($content = null) { if(is_string($content)) { return strtoupper($content); } return $this->_successor->filter($content); } }
le fichier d'execution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?php namespace Exercises\ChainResponsabilityPattern\Complete; class DoubleFilter extends MainFilterAbstract { public function __construct(MainFilterAbstract $filter = null) { parent::__construct($filter); } public function filter($content = null) { if(is_int($content)) { return $content * 2; } return $this->_successor->filter($content); } }
La sortie console
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $upperCaseFilter = new UpperCaseFilter(); $myFilter = new DoubleFilter($upperCaseFilter); $space = ' '; echo $myFilter->filter('hello') . $space; echo $myFilter->filter('24') . $space; echo $myFilter->filter(360) . $space;
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part HELLO 24 720
Partager