Salut sauf erreur de ma part (je suis autodidacte depuis +/- 6mois) je pense pouvoir dire sans me tromper (si des pros passent, qu'il corrigent les erreurs):
-
il s'agit de s'assurer que l'argument reçu est bien du type spécifié. Tu aura donc une erreur fatal si tu fais par exemple:
$test = 1; //variable de type intier (instance de int)
function essais( array $var)
{
// function
}
essais($test)
en effet, le paramètre attendu est de type array alors que tu passes un int
- le petit & devant la variable dans le argument permette de passer l’élément par référence et non par valeur. En fait quand tu envois une valeur à une fonction PHP copie la valeur pour la fonction et si tu modifies la valeur dans la fonction, la valeur hors fonction ne sera pas modifiée. Tandis que lorsque tu mets le petit &, c'est le pointeur vers la variable que tu donne à la fonction. regarde les deux exemple ci-dessous:
sans le & dans la définition de la fonction
<?php
$test = 'essais';
function test( $var)
{
$var = 'variable modifiee';
}
test($test);
echo $test; //renvoi essais
alors que avec le petit &
<?php
$test = 'essais';
function test( $var)
{
$var = 'variable modifiee';
}
test($test); //renvoi: 'variable modifieee'
echo $test;
-
A mon avis tu as une erreur dans
$attributes'value'] = '';
en effet tu compares si la clef est dans le tableau ET qu'elle vaut '' mais fait attention:
$var = ''
est différent de
$var == ''
si = tu assignes la valeur à la variable
si == tu vérifies que la variable à la valeur
donc tu devrais avoir un double égal
array_key_exists('value', $attributes) and $attributes'value'] == '';
ce qui montre que c'est différent