1
votes

count () renvoie un avertissement si NULL à partir de PHP 7.2. Y a-t-il un meilleur moyen de résoudre ce problème pour PHP 5.6+ que d'ajouter une autre condition?

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.


5 commentaires

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.


3 Réponses :


2
votes

Un fudge serait d'utiliser null coalesce ( ?? ) pour le définir sur un tableau vide si nul ...

if (count($this->implements??[]) > 0)


3 commentaires

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.



0
votes

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.


3 commentaires

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



1
votes

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) {
}


3 commentaires

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