Par exemple:
if (!is_null($this->implements) && count($this->implements) > 0)
produira un avertissement. Je peux toujours faire ceci:
if (count($this->implements) > 0)
Mais y a-t-il un moyen plus simple et meilleur de résoudre ce problème? Il doit également être entièrement rétrocompatible avec PHP 5.6.
3 Réponses :
Un fudge serait d'utiliser null coalesce ( ??
) pour le définir sur un tableau vide si nul ...
if (count($this->implements??[]) > 0)
malheureusement, il doit encore être rétrocompatible et ??
a été ajouté dans PHP 7 je crois. Je viens de tester, et cela ne fonctionne pas avec 5.6
Vous êtes simplement curieux de savoir pourquoi vous utilisez également la version 5.6?
@ Akintunde-Rotimi C'est une bibliothèque open-source pour laquelle je fais des pull requests. Il devrait être compatible à partir de la version 5.6 car il est utilisé dans de nombreux projets différents, fonctionnant sur différentes versions de PHP.
count () produira un avertissement si NULL à partir de PHP 7.2. Y a-t-il un meilleur moyen de résoudre ce problème que d'ajouter une autre condition?
OUI
La solution est de forcer l'argument à être un tableau:
if (count((array)$this->implements) > 0)Cela fonctionne sur PHP 5 et 7, toutes les versions jusqu'à 7.2.4 testé. Aucune entrée du journal des erreurs n'a été trouvée.
@SalmanA OP n'a pas qualifié que la propriété n'existerait jamais pas , simplement qu'elle peut parfois être null
. Et une erreur de niveau notice est une étape importante par rapport au niveau avertissement .
count accepte volontiers les non-tableaux. count (null) -> 0. OP parle probablement de Remarque: propriété indéfinie foo :: $ implements .
@SalmanA en PHP 7.2 il jette un AVERTISSEMENT , veuillez consulter le page de manuel .
Vous pouvez utiliser empty ()
. Il retournera true si la propriété n'existe pas (sans déclencher "Notice") ou est fausse (un tableau vide est faux):
if (empty($this->implements) === false) { }
OP utilise count ... il doit remplacer count par empty.
oups, j'ai vu cela comme un rarter supplémentaire qu'un remplacement. Un de plus. ;-)
C'est probablement la meilleure solution, même si je l'ai maintenant corrigée différemment dans le code. Tout ce que j'avais à faire était d'initialiser $ this-> implements
comme un array ()
vide. Il s'agira toujours d'un tableau et cela résout le problème WARNING. S'il voyait cela, mon collègue .NET secouerait à nouveau la tête et essaierait de me convaincre d'apprendre une langue fortement typée ...
Que diriez-vous de
if (! Empty ($ this-> implements))
?J'ai essayé d'utiliser count (NULL) et je n'ai pas d'erreur, quelle erreur avez-vous?
Que voulez-vous qu'il se passe avec un tableau contenant des valeurs
null
?@Vykintas ce n'est pas une erreur mais un avertissement. Vérifiez votre journal des erreurs php ou activez xdebug.
@Martin absolument rien, il l'ignore si c'est NULL.