web-dev-qa-db-fra.com

PHP 5.4: désactiver l'avertissement "Création d'un objet par défaut à partir d'une valeur vide"

Je souhaite migrer le code de PHP 5.2 à 5.4. Cela a bien fonctionné jusqu’à présent, sauf que tout le code que j’utilise utilise beaucoup le fait d’utiliser un objet avec un membre sans aucune initialisation, comme:

$MyObject->MyMember = "Hello";

ce qui entraîne l'avertissement suivant: "Création d'un objet par défaut à partir d'une valeur vide"

Je sais que la solution serait d'utiliser:

$MyObject = new stdClass();
$MyObject->MyMember = "Hello";

mais ce serait BEAUCOUP de travail de changer cela dans tout mon code, parce que je l'utilise souvent dans différents projets. Je sais que ce n'est pas un bon style, mais malheureusement, je ne peux pas passer les prochaines semaines à l'ajouter à tout mon code.

Je sais que je pourrais définir le php error_reporting de ne pas signaler les avertissements, mais je veux pouvoir obtenir d'autres avertissements et notifications. Cet avertissement ne semble pas être affecté par l'activation ou la désactivation de E_STRICT. Alors, y a-t-il un moyen de simplement désactiver cet avertissement?!

10
Werner

Techniquement, vous pouvez faire cela en en installant votre propre gestionnaire d’erreurs pour les avertissements. Dans le gestionnaire, vérifiez le message d'erreur de chaîne; Si c'est celui que vous voulez supprimer, alors return true, sinon return false pour laisser le gestionnaire d'erreurs par défaut faire son travail.

Cependant, je recommanderais quand même de faire ce qui s'impose et de corriger manuellement votre code chaque fois que cet usage abusif apparaîtra, car il vous permet, à tout le moins, de prendre l'habitude. À moins que cela ne soit un travail rémunéré (dans ce cas, il existe généralement des préoccupations qui prévalent sur la pureté de la mise en œuvre), considérez cela comme une leçon et agissez comme il convient.

8
Jon

Je sais que je pourrais définir le php error_reporting de ne pas signaler les avertissements, mais je veux pouvoir obtenir d'autres avertissements et notifications.

Ne désactivez pas le rapport d'erreur, laissez-le à un niveau approprié, mais désactivez la directive display_errors :

ini_set('display_errors', 0);

Il n'y a aucune raison d'imprimer des avis à l'écran en production.

Ensuite, comme l'a dit Jon, utilisez un gestionnaire d'erreurs personnalisé si ce n'est déjà fait, par exemple:

function my_error_handler($error_level, $error_message)
{
    // write error message to log file
}
set_error_handler('my_error_handler');

Vous pouvez transmettre le niveau de signalisation d'erreur au deuxième paramètre de set_error_handler. De cette façon, vous pouvez prendre votre temps et faire le bon choix, c'est-à-dire corriger le code pour cesser de générer des avis.

Si vous déplacez beaucoup de sites vers la version 5.4, vous pouvez probablement demander à votre administrateur de serveur de désactiver display_errors dans le fichier php.ini jusqu'à ce que vous ayez le temps de tout réparer. Mieux encore, organisez tout et réparez-le avant de procéder à la mise à niveau, mais cela peut ne pas être une option.

4
Wesley Murch

vous pouvez vraiment utiliser un IDE pour php et essayer ceci:

Rechercher $MyObject->MyMember = "Hello";

Recherchez les résultats et si cela apporte les bonnes choses, essayez de le remplacer par:

$MyObject = new stdClass();
$MyObject->MyMember = "Hello";

Alors peut-être que IDE ferait le long travail pour vous ...

1
Komdev

J'ai eu le même problème que je traite comme ci-dessous dans l'environnement de production

    \error_reporting(\E_ERROR);

Je dois dire que mon application n'a pas besoin/ne génère pas d'erreurs, elle est sur un environnement très contrôlé, donc cela ne ferait pas beaucoup de mal, mais si votre application est sujette aux erreurs, vous devriez avoir votre propre gestionnaire des erreurs et avec une expression rationnelle appropriée et preg_match ignore l'alerte “Creating default object from empty value” et enregistre/invite les autres à votre discrétion.

0
dariush