Ich sehe diesen Fehler erst nach dem Upgrade meiner PHP-Umgebung auf PHP 5.4 und höher. Der Fehler zeigt auf diese Codezeile:
Error:
Standardobjekt aus leerem Wert erstellen
Code:
$res->success = false;
Muss ich zuerst mein $res
Objekt deklarieren ?
$res
?Antworten:
Ihre neue Umgebung kann
E_STRICT
Warnungen aktiviert inerror_reporting
PHP - Versionen <= 5.3.x oder einfach haterror_reporting
auf mindestensE_WARNING
mit PHP - Versionen> = 5.4. Dieser Fehler wird ausgelöst, wenn$res
istNULL
oder noch nicht initialisiert:PHP meldet eine andere Fehlermeldung, wenn
$res
es bereits auf einen bestimmten Wert initialisiert wurde, aber kein Objekt ist:Um zu erfüllen
E_STRICT
Standards vor PHP 5.4 oder der normalenE_WARNING
Fehlerebene in PHP> = 5,4, vorausgesetzt , Sie versuchen , ein generisches Objekt zu erstellen und weisen Sie die Eigenschaftsuccess
, müssen Sie erklären ,$res
als ein Objekt derstdClass
im globalen Namespace:quelle
if (!isset($res)) $res = new stdClass();
. Andernfalls ist dieser Code kein gleichwertiger Ersatz für die implizite Objekterstellung "altes PHP".Diese Nachricht war
E_STRICT
für PHP <= 5.3. Seit PHP 5.4 wurde es unglücklicherweise auf geändertE_WARNING
. DaE_WARNING
Nachrichten nützlich sind, möchten Sie sie nicht vollständig deaktivieren.Um diese Warnung zu entfernen, müssen Sie diesen Code verwenden:
Dies ist ein völlig gleichwertiger Ersatz . Es stellt genau das sicher, was PHP stillschweigend tut - leider mit Warnung jetzt - implizite Objekterstellung. Sie sollten immer überprüfen, ob das Objekt bereits vorhanden ist, es sei denn, Sie sind sich absolut sicher, dass dies nicht der Fall ist. Der von Michael bereitgestellte Code ist im Allgemeinen nicht gut, da das Objekt in einigen Kontexten je nach den Umständen manchmal bereits an derselben Stelle im Code definiert ist.
quelle
Undefined variable: res
.Einfach,
Oder Sie können Klassen instanziieren mit:
und fülle Werte mit:
Weitere Informationen: https://www.php.net/manual/en/language.types.object.php#language.types.object.casting
quelle
$this->route->uri = new stdClass();
funktioniert nicht für mich, ich habe immer noch die Warnung. Hinweis:$this->route
ist vorhanden.Wenn Sie den Zeilenanfang "@" in die Zeile setzen, zeigt PHP keine Warnung / Benachrichtigung für diese Zeile an. Zum Beispiel:
Um diese Warnung für diese Zeile zu verhindern, müssen Sie den Zeilenanfang wie folgt in die Zeile einfügen:
Ich benutze diesen Trick bei der Entwicklung. Ich mag es nicht, alle Warnmeldungen zu deaktivieren, denn wenn Sie Warnungen nicht richtig behandeln, werden sie in Zukunft zu einem großen Fehler.
quelle
Versuchen Sie dies, wenn Sie ein Array haben und fügen Sie Objekte hinzu.
Dies sendet ARRAY of Objects zur späteren Verwendung ~!
quelle
Versuche dies:
quelle
E_STRICT
Fehlern, einschließlich der Unterdrückung von Meldungen für schwerwiegende Fehler. Das ist kein vernünftiger Vorschlag, um diese spezielle Warnung zu lösen, und außerdem möchten Sie so gut wie nie etwas tun. Warum 5 Leute dies positiv bewertet haben, weiß ich nicht.ini_set('error_reporting', -1);
beim Debuggen, aber verwenden Sie es nicht wie immer.Ich hatte ein ähnliches Problem und dies scheint das Problem zu lösen. Sie müssen nur das $ res-Objekt für eine Klasse initialisieren. Angenommen, hier lautet der Klassenname test.
quelle
Dies ist eine Warnung, mit der ich in PHP 7 konfrontiert war. Die einfache Lösung besteht darin, die Variable vor der Verwendung zu initialisieren
Sobald Sie es initialisiert haben, können Sie es für Objekte verwenden
quelle
Dieses Problem wird verursacht, weil Sie einer Instanz eines Objekts zuweisen, das nicht initiiert wurde. Zum Beispiel:
Dein Fall:
Lösung:
quelle
Eine einfache Möglichkeit, diesen Fehler zu erhalten, besteht darin, (a) unten einzugeben, dh (b) einzugeben.
(ein)
$this->my->variable
(b)
$this->my_variable
Trivial, aber sehr leicht zu übersehen und schwer zu erkennen, wenn Sie nicht danach suchen.
quelle
_
und->
Möglicherweise müssen Sie überprüfen, ob die Variable deklariert ist und den richtigen Typ hat.
Siehe anonyme PHP-Klassen .
quelle
Ich hatte ein ähnliches Problem beim Versuch, einem von einer API zurückgegebenen Objekt eine Variable hinzuzufügen. Ich habe die Daten mit einer foreach-Schleife durchlaufen.
Dies löste die Ausnahme "Standardobjekt aus leerem Wert erstellen" in Laravel aus.
Ich habe es mit einer sehr kleinen Änderung behoben.
Indem Sie einfach $ data zu einer Referenz machen.
Ich hoffe das hilft jemandem und es hat mich verdammt geärgert!
quelle
Denken Sie zuerst, Sie sollten das Objekt $ res = new \ stdClass () erstellen.
dann Objekt mit Schlüssel und Wert zuweisen, dass $ res-> success = false;
quelle
thay
.) Wenn Sie nach einigen Inhalten einen Zeilenumbruch wünschen, fügen Sie vor dem zukünftigen Zeilenumbruch zwei Leerzeichen an den sichtbaren Inhalt der Zeile an.Nein, das tun Sie nicht. Es wird erstellt, wenn Sie dem Objekt den Erfolgswert hinzufügen. Die Standardklasse wird vererbt, wenn Sie keine angeben.
quelle
Versuchen Sie es mit:
quelle
Ich habe Folgendes oben in die fehlerhafte PHP-Datei eingefügt und der Fehler wurde nicht mehr angezeigt:
quelle