You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/php/php.md
+57Lines changed: 57 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -13,3 +13,60 @@ Cela permet d'avoir une vrai segmentation visuelle afin de comprendre très rapi
13
13
14
14
Cela permet aussi d'éviter les problèmes de complexités grammaticales en anglais (les mots terminant en "y" sont transformés en "ies" au pluriels : "cherry" / "cherries", les mots en "-f" prennent un "v", ex "wife" / "wives", etc.).
15
15
:::
16
+
17
+
## Assertions
18
+
19
+
En PHP, on a plusieurs façons de faire des assertions. Pour rappel une assertions en PHP [est définie de la manière suivante](https://www.php.net/assert) :
20
+
21
+
:::info Assertion
22
+
Les assertions doivent être utilisées uniquement comme fonctionnalité de débogage. Un cas d'utilisation pour les assertions est de servir de vérifications de cohérence pour des préconditions qui devraient toujours être true, et si elles ne sont pas respectées, cela indique des erreurs de programmation.
23
+
:::
24
+
25
+
Autrement dit, si l'on envoit une erreur, c'est que c'est du code qui NE DOIT JAMAIS échouer.
26
+
27
+
Une façon de faire ça est d'utiliser un `if` avec une exception :
28
+
29
+
```php
30
+
if (!is_int($id)) {
31
+
throw new \LogicException('$id must be an int. This should not happen.');
32
+
}
33
+
```
34
+
35
+
C'est très fonctionnel, mais c'est un peu verbeux, et on ne sait jamais trop quelle exception lancer (`InvalidArgumentException`, `RuntimeException`, `LogicException` ?)
36
+
37
+
Une autre façon est d'utiliser la fonction php [`assert`](https://www.php.net/assert) :
38
+
39
+
40
+
```php
41
+
assert(is_int($id));
42
+
```
43
+
44
+
C'est très simple, mais cela manque de description, et cela ne permet pas d'avoir d'assertions complexes écrites simplement.
45
+
46
+
On DEVRAIT utiliser la librairie webmozarts/assert qui donne accès à un large panel d'assertion, et qui permet d'avoir un message d'erreur plus explicite.
47
+
48
+
:::note
49
+
Pour info, webmozarts utilise une `InvalidArgumentException` en soute.
50
+
:::
51
+
52
+
## Utilisation de `compact`
53
+
54
+
Il existe une fonction [`compact`](https://www.php.net/compact) en PHP qui permet de créer un tableau à partir de chaine de caractère:
55
+
56
+
```php
57
+
$id = 5;
58
+
59
+
$r = compact('id');
60
+
61
+
// [ 'id' => 5 ]
62
+
```
63
+
64
+
Cela dit, cette fonction est trop "magique" et moins lisible.
65
+
66
+
On NE DOIT PAS utiliser cette fonction en production, mais préférer la version explicite :
0 commit comments