it-swarm.com.de

PHP 5.4: Warnung deaktivieren "Standardobjekt aus leerem Wert erstellen"

Ich möchte Code von PHP 5.2 nach 5.4 migrieren. Das hat soweit gut funktioniert, außer dass der gesamte Code, den ich verwende, ausgiebig verwendet wird, wenn nur ein Objekt mit einem Member ohne Initialisierung verwendet wird.

$MyObject->MyMember = "Hello";

was zu der Warnung führt: "Standardobjekt aus leerem Wert erstellen"

Ich weiß, dass die Lösung darin bestehen würde:

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

es wäre jedoch VIEL VIELE ARBEIT, dies in meinem gesamten Code zu ändern, da ich dies oft in verschiedenen Projekten verwende. Ich weiß, es ist kein guter Stil, aber leider kann ich die nächsten Wochen nicht damit verbringen, diesen Code in meinen gesamten Code einzufügen.

Ich weiß, ich könnte php error_reporting so einstellen, dass keine Warnungen gemeldet werden, aber ich möchte noch andere Warnungen und Hinweise erhalten. Diese Warnung scheint nicht durch das Aktivieren oder Deaktivieren von E_STRICT ausgelöst zu werden. Gibt es eine Möglichkeit, diese Warnung einfach zu deaktivieren ?!

10
Werner

Technisch gesehen könnten tun Sie dies durch Installieren eines eigenen Fehlerhandlers für Warnungen. Überprüfen Sie innerhalb des Handlers die Zeichenfolge-Fehlernachricht. Wenn Sie die Unterdrückung unterdrücken möchten, return true, andernfalls return false, um den Standardfehler zuzulassen Handler machen sein Ding.

Ich würde jedoch immer noch empfehlen, das Richtige zu tun und den Code manuell zu korrigieren, wo auch immer dieser Missbrauch auftritt, denn wenn nicht anders, bringt er Sie in die richtige Gewohnheit. Wenn dies nicht bezahlte Arbeit ist (in diesem Fall gibt es normalerweise Bedenken, die die Reinheit der Implementierung außer Kraft setzen), betrachten Sie dies als eine Lektion und tun Sie das Richtige.

8
Jon

Ich weiß, ich könnte php error_reporting so einstellen, dass keine Warnungen gemeldet werden, aber ich möchte noch andere Warnungen und Hinweise erhalten.

Deaktivieren Sie die Fehlerberichterstattung nicht, lassen Sie sie auf einem geeigneten Niveau, deaktivieren Sie jedoch die Direktive display_errors :

ini_set('display_errors', 0);

Es gibt keinen Grund, in der Produktion Benachrichtigungen auf dem Bildschirm zu drucken.

Dann verwenden Sie, wie Jon gesagt hat, einen benutzerdefinierten Fehlerbehandler, wenn Sie nicht bereits vorhanden sind. Beispiel:

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

Sie können die Fehlerberichtsebene an den zweiten Parameter von set_error_handler übergeben. Auf diese Weise können Sie sich Zeit nehmen und das Richtige tun, indem Sie den Code so einstellen, dass keine Benachrichtigungen mehr erzeugt werden.

Wenn Sie viele Websites auf 5.4 umstellen, kann es sein, dass Ihr Serveradministrator display_errors in php.ini deaktiviert, bis Sie genug Zeit haben, um alles zu beheben. Besser noch, inszenieren Sie alles und beheben Sie es vor dem Upgrade, aber das ist möglicherweise keine Option.

4
Wesley Murch

sie könnten wirklich ein IDE für PHP verwenden und versuchen, dies zu tun:

Suche nach $MyObject->MyMember = "Hello";

Suchen Sie nach den Ergebnissen und wenn es die richtigen Dinge bringt, versuchen Sie, dies durch Folgendes zu ersetzen:

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

Vielleicht würde der IDE die lange Arbeit für Sie erledigen ...

1
Komdev

Ich hatte das gleiche Problem, mit dem ich mich wie in der Produktionsumgebung beschäftige

    \error_reporting(\E_ERROR);

Ich muss sagen, dass meine Anwendung keine Fehler benötigt/generiert, sie befindet sich in einer sehr kontrollierten Umgebung, so dass dies nicht viel schaden würde, aber wenn Ihre Anwendung eine fehleranfällige ist, sollten Sie über einen eigenen error handler verfügen. und mit einem ordnungsgemäßen Regex und preg_match ignorieren Sie die “Creating default object from empty value”-Warnung und log/Prompt andere nach Ihrem Ermessen.

0
dariush