Pourquoi dois-je assigner le résultat de la fonction de tableau end () de PHP à une variable pour agir sur le résultat?

StackOverflow https://stackoverflow.com/questions/1633301

  •  06-07-2019
  •  | 
  •  

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);
  }
Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top