9
votes

Fonction PHP FOO (Array $ Arg = NULL) - Pourquoi le tableau et NULL?

J'ai vu ce qui suit plusieurs fois ces derniers temps: XXX PRE>

Ma question Être Pourquoi faire de la valeur par défaut de $ arg code> null code> Quand il sera juste de lancer dans un tableau? Pourquoi ne pas faire: p>

 function foo(array $arg = array()) { ... }


2 commentaires

$ arg pas ne sera pas installé sur un tableau (). Ce sera null à l'intérieur de FOO si aucun argument n'est fourni.


Ah! Je l'obtiens maintenant! Merci tout le monde!


6 Réponses :


4
votes

Mon hypothèse est qu'ils veulent un tableau pour un paramètre, mais une valeur null pour le paramètre est acceptable (et sera utilisée par défaut si un tableau - ou un null - n'est pas donné).

Notez que la spécification tableau dans la signature de fonction ne concerne pas la coulée, mais est un type indice . Il est indiqué que seules les tableaux sont acceptés pour $ arg .


1 commentaires

Non. Tous les deux = null et = tableau () ne permettent aucun argument, mais seulement = null permet à l'argument d'être null .



7
votes

La vraie question est pourquoi créer un tableau lorsque vous n'avez pas besoin d'un.

Si vous utilisez $ Arg = Array (), une instruction spécifique permettra de créer un tableau, même si elle est PHP, une instruction consomme toujours des cycles de processeur. Si vous venez de faire $ Arg = NULL, alors rien ne sera fait.


1 commentaires

Les économies sont probablement minuscules. Mais array $ arg = null permet au paramètre d'être null , tandis que array $ arr = tableau () déclenche une erreur si le paramètre est null .



0
votes

Peut-être que si votre fonction FOO doit faire quelque chose lorsque la fonction est appelée explicitement avec un tableau vide. Je veux dire:

si p>

foo();


0 commentaires

2
votes

= null code> est un moyen de permettre à l'argument d'avoir une valeur de NULL:
$bar = NULL;

// Do stuff that may involve $bar

// $bar may be an array, or it may still be NULL
foo($bar);

// For the above line to not trigger an error if $bar === NULL, you must use
function foo(array $arg = NULL) { ... }


0 commentaires

1
votes

La raison est probablement de distinguer entre un ensemble vide d'objets à traiter et une fonctionnalité légèrement différente lorsque rien n'est placé.

Comme exemple hypothétique, disons que vous avez une fonction qui crée des rapports pour les utilisateurs. Le tableau d'entrée contient les identifiants (ou même les objets) des utilisateurs pour lesquels les rapports doivent être générés. La même fonction pourrait aussi bien être utilisée pour traiter les rapports lorsque vous devez traiter tous les utilisateurs, par opposition à un certain ensemble. Lorsque vous souhaitez uniquement traiter des utilisateurs spécifiques, vous lanceriez dans la matrice. Mais si vous vouliez les traiter tous, il est logique que le paramètre soit une null distincte au lieu d'un «non utilisé», ce qui serait un tableau vide.

Par exemple, disons qu'il existe une page dans laquelle un administrateur peut désigner quels utilisateurs pour créer des rapports. Mais l'administrateur appuie sur le bouton "Créer des rapports" sans sélectionner d'utilisateurs, auquel cas un tableau vide sera jeté dans la fonction et la fonction traiterait avec précision aucun utilisateur, car il n'y a pas d'utilisateur dans la matrice.

Alors peut-être que vous pourriez avoir un bouton différent ailleurs dans ce système hypothétique, "Créer tous les rapports", auquel cas vous ne lanceriez rien dans et la fonction serait en mesure de raconter la différence entre "Nombre d'utilisateurs = 0 "et" utilisateurs non fournis ", ce qui signifie dans ce cas" tous les utilisateurs ".

C'est un exemple. En général, j'utilise NULL comme paramètre par défaut pour pouvoir distinguer dans la fonction si quelque chose a été transmis ou non, car le comportement de la fonction peut être différent lorsque rien d'en particulier n'est spécifié, selon l'exemple donné ci-dessus.


0 commentaires

1
votes

C'est quelques années que je sais, mais je ne peux pas m'empêcher de dire que la mauvaise réponse a été choisie et personne n'a clairement répondu à la question complète. Donc, pour d'autres qui en regardent et veulent savoir ce qui se passe vraiment ici: xxx pré>

Lorsque vous appelez foo () la première chose qui va arriver est PHP testera $ argers pour voir si C'est un tableau. C'est vrai, Array $ Arg est un test. Si $ arg n'est pas un tableau, vous verrez cette erreur: p>

si $ arg est une chaîne: p> xxx pré>

ok, alors null signifie juste que dans Case $ Arg n'est pas adopté, nous allons la définir à NULL. C'est juste un moyen de rendre $ argers facultatif ou de préréglage sa valeur. P>

et juste pour être clair, il n'y a pas de paramètres de fonction de type de type sans utilisation du patch RFC, ici . p>

Si vous utilisez le correctif RFC, vous pouvez faire: P>

function foo((array)$arg){ ... }


0 commentaires