Contrôler les données d'un tableau
En PHP, on ne peut pas déclarer à l'initialisation d'un tableau le type de données qu'il va contenir. En java par exemple, si on veut déclarer un tableau d'entier, on peut faire :
int [] var;
Donc pour combler ce manque, il peut nous arriver d'écrire ce genre de code lorsqu'on utilise un tableau.
class Foo
{
private array $items;
public function __construct(array $items)
{
foreach ($items as $item) {
if (!is_int($item)) {
throw new Exception('Wrong type for item '.$item);
}
}
$this->items = $items;
}
// ...
}
$foo = new Foo([1, 2, 3, 4]);
On s'assure ici que chaque élément est bien un entier. Mais savez-vous qu'il est possible de déléguer ce traitement directement à PHP ?
D'après ce que j'ai lu ici et là, ce que je vous présente ensuite est valable pour des petites collections. Si vous avez à traiter de gros volumes de données, il est apparemment déconseillé d'utiliser ça.
On peut utiliser l'opérateur de décomposition dans la déclaration d'une fonction et aussi lors de son appel. Nous allons donc utiliser cet opérateur pour faciliter le contrôle des données.
class Foo
{
private array $items;
public function __construct(int ...$items)
{
$this->items = $items;
}
}
$foo = new Foo(...[1, 2, 3, 4]);
Et si vous voulez vous assurer que votre tableau ait au moins un élément, il faut rajouter un paramètre dans le constructeur.
class Foo
{
private array $items;
public function __construct(int $item, int ...$items)
{
$this->items = [$item, ...$items];
}
}
$foo = new Foo(...[1, 2, 3, 4]);
try
/ catch
sur ArgumentCountError
class Foo
{
private array $items;
public function __construct(int $item, int ...$items)
{
$this->items = [$item, ...$items];
}
}
try {
$foo = new Foo(...[]);
} catch (ArgumentCountError $e) {
echo $e->getMessage();
}
TypeError
try {
$foo = new Foo(...['a', 'n']);
} catch (TypeError $e) {
echo $e->getMessage();
}
Throwable
ou Error
try {
$foo = new Foo(...['a', 'n']);
} catch (Error $e) {
echo $e->getMessage();
}
Mon programme "S'entraîner pour progresser en PHP" est disponible. Il vous permettra de recevoir chaque semaine un kata de code directement dans votre boîte mail, ainsi que des aides à la réalisation, des vidéos explicatives et des défis supplémentaires.