Fonctions utiles
La fonction func_num_args() retourne le nombre d’arguments passés à la fonction.
La fonction func_get_args() retourne les arguments passés à la fonction sous forme d’un tableau.
La fonction func_get_arg(int $arg_num) retourne un élément issu de la liste des arguments passés à la fonction.
Passage d’arguments par référence
Par défaut les arguments sont passés par valeur (sauf les objets qui sont passés par référence). C’est à dire qu’il s’agit d’une sorte de copie du contenu de la variable que l’on passe. Ainsi, si celle-ci est modifiée à l’intérieur de la fonction, la variable externe qui a été passée en paramètre n’est pas modifiée, sa valeur reste la même qu’avant l’appel à la fonction.
S’il est souhaité qu’une fonction puissent modifier la valeur d’un argument, il faut passer cet argument par référence. Il n’est alors pas nécessaire de retourner cette valeur pour modifier la variable d’origine à l’extérieur de la fonction pour avoir son contenu modifié.
// Paramètre passé par référence
function getCompleteDate(&$une_date)
{
$une_date .= '/2020';
}
$some_date = '16/05';
getCompleteDate($some_date);
echo $some_date; // Affichera : 16/05/2020Les objets, comme dit ci-dessus, sont par défaut passés par référence. Il n’est donc pas indispensable d’ajouter le caractère « & » s’il est souhaité de récupérer un objet modifié par le comportement d’une fonction.
Nombre d’arguments variable
Depuis PHP 5.6 il est possible de passer un nombre d’arguments variable à une fonction via le mot-clé …, qu’il s’agisse de l’unique paramètre ou d’un des paramètres de la fonction.
// Unique paramètre mais il peut y en avoir un nombre indéfini
function getSum(...$numbers)
{
$sum = 0;
foreachf ($numbers as $number)
{
$sum += $number;
}
return $sum;
}
echo getSum(1, 2, 3, 4); // Affichera : 10
// Fonction à plusieurs paramètres dont un seul peut être présent en nombre indéfini
function example($param_a, $param_b, ...$numbers)
{
}Typage
Les paramètres comme la valeur de retour peuvent être typés.
Typage des paramètres
// Les types de base
function calculate(int $age, float $taux, string $name, array $sinistres, bool $jeune_conducteur)
{
}
// Les objets
function getProfile(User $user) {
}
// Autres types
function example(callable $callback, iterable $array)
{
}
// Autoriser la valeur null
function setDriverLicenseDate(?$une_date)
{
}Typage du retour
// Les types de base (array, int, float, string, bool)
function getList(): array
{
}
// Un objet
function getPolicyClient(): Client
{
}
// Aucun retour attendu
function setName(): void
{
}
// Autorise la valeur null en retour
function getPolicyClaims(): ?array
{
}