Pourquoi dois-je assigner le résultat de la fonction de tableau end () de PHP à une variable pour agir sur le résultat?
Question
J'ai essayé de supprimer la dernière entrée d'un tableau, éventuellement vide, comme suit, mais le message d'erreur suivant s'affiche: "Impossible d'utiliser la valeur de retour de la fonction dans le contexte d'écriture":
if (empty(end($crontabEntryList))) {
array_pop($crontabEntryList);
}
Si je mets d’abord la valeur de retour de end à une variable (comme en bas), je peux supprimer cette dernière entrée si elle est vide. Selon la entrée manuelle pour end () , elle retourne la valeur du dernier élément ou FALSE pour vide tableau. " Grâce à Google, j'ai trouvé une explication possible : Les booléens ne sont pas "inscriptibles".
Cependant, il semblerait que cette erreur soit renvoyée, dans mon contexte spécifique, et éventuellement d'autres documentés ici sous SO , simplement parce qu'il est possible de retourner un booléen. Parce que, dans mon cas, le tableau était décidément pas , et donc plutôt que false, end () "renvoie la valeur du dernier élément".
Mes hypothèses sont-elles correctes? Dans quel cas, cela n’est-il pas incompatible avec la nature mal typée de PHP? Ou est-ce parce que le dernier élément du tableau est "non inscriptible"? Dans ce cas, qu'est-ce qui constitue précisément le "contexte d'écriture"? en PHP?
$last = end($crontabEntryList);
if (empty($last)) {
array_pop($crontabEntryList);
}
La solution
Cela n'a rien à voir avec end () ou "écriture". de booléens.
empty ()
et isset ()
ne sont pas des fonctions, ce sont des constructions de langage.
De la documentation pour empty ()
:
Remarque: empty () vérifie uniquement les variables comme toute autre chose entraînera une analyse Erreur. En d'autres termes, ce qui suit ne fonctionnera pas: vide (trim ($ name)).
Encore une fois: seules les variables peuvent être passées à empty ()
.
Autres conseils
empty () est bizarre comme ça. Je viens d'apprendre à l'accepter et à le contourner autant que possible (avec la solution que vous avez fournie).
Si vous essayez simplement d'effacer les valeurs vides d'un tableau, essayez array_filter ()
Puis-je suggérer simplement d'utiliser un contrôle négatif sur la valeur de retour de end ()? À mon avis, end () renvoie la valeur du dernier élément ou FALSE si elle est vide. Ainsi, au lieu d’utiliser le code supplémentaire pour créer une autre variable à tester avec empty, il suffit de tester le retour de end ():
/* Edited */
if(!(trim(end($crontabEntryList)))) {
array_pop($crontabEntryList);
}
J'ai testé cela sur mon système avec un tableau de chaînes et il semble avoir l'effet souhaité.