Widzę ten błąd dopiero po zaktualizowaniu środowiska PHP do wersji PHP 5.4 i nowszych. Błąd wskazuje na ten wiersz kodu:
Błąd:
Tworzenie domyślnego obiektu z pustej wartości
Kod:
$res->success = false;
Czy najpierw muszę zadeklarować swój $res
obiekt?
$res
?Odpowiedzi:
W nowym środowisku może być włączone
E_STRICT
ostrzeżenia dla wersji PHP <= 5.3.x lub po prostu ustawione na przynajmniej wersje PHP> = 5.4. Ten błąd jest wyzwalany, gdy jest lub nie jest jeszcze zainicjowany:error_reporting
error_reporting
E_WARNING
$res
NULL
PHP zgłosi inny komunikat o błędzie, jeśli
$res
jest już zainicjowany na jakąś wartość, ale nie jest obiektem:Aby zachować zgodność ze
E_STRICT
standardami wcześniejszymi niż PHP 5.4 lub normalnymE_WARNING
poziomem błędu w PHP> = 5.4, zakładając, że próbujesz utworzyć obiekt ogólny i przypisać właściwośćsuccess
, musisz zadeklarować$res
jako obiektstdClass
w globalnej przestrzeni nazw:źródło
if (!isset($res)) $res = new stdClass();
. W przeciwnym razie ten kod nie jest równoważnym zamiennikiem niejawnego tworzenia obiektów „starego PHP”.Ta wiadomość
E_STRICT
dotyczy PHP <= 5.3. Od PHP 5.4 zmieniono to na nieszczęścieE_WARNING
. PonieważE_WARNING
wiadomości są przydatne, nie chcesz ich całkowicie wyłączać.Aby pozbyć się tego ostrzeżenia, musisz użyć tego kodu:
Jest to w pełni równoważna wymiana . Zapewnia dokładnie to samo, co PHP cicho robi - niestety teraz z ostrzeżeniem - niejawne tworzenie obiektów. Zawsze powinieneś sprawdzić, czy obiekt już istnieje, chyba że masz absolutną pewność, że nie istnieje. Kod dostarczony przez Michaela nie jest ogólnie dobry, ponieważ w niektórych kontekstach obiekt może czasami być już zdefiniowany w tym samym miejscu kodu, w zależności od okoliczności.
źródło
Undefined variable: res
.Po prostu,
Lub możesz utworzyć instancję zajęć za pomocą:
i wypełnij wartości:
Więcej informacji: https://www.php.net/manual/en/language.types.object.php#language.types.object.casting
źródło
$this->route->uri = new stdClass();
nie działa dla mnie, nadal mam ostrzeżenie. Uwaga:$this->route
istnieje.Jeśli umieścisz znak „@” na początku wiersza, PHP nie wyświetli żadnego ostrzeżenia / powiadomienia dla tego wiersza. Na przykład:
Aby zapobiec ostrzeżeniu dla tego wiersza, należy umieścić znak „@” na początku wiersza w następujący sposób:
Używam tej sztuczki podczas programowania. Nie lubię wyłączać wszystkich komunikatów ostrzegawczych, ponieważ jeśli nie będziesz obsługiwał ostrzeżeń poprawnie, w przyszłości staną się one dużym błędem.
źródło
Spróbuj tego, jeśli masz tablicę i dodaj do niej obiekty.
Ten wysyła ARRAY z obiektami w celu późniejszego użycia ~!
źródło
Spróbuj tego:
źródło
E_STRICT
błędach oprócz błędów, w tym pomijanie komunikatów o błędach krytycznych. To nie jest rozsądna sugestia, aby rozwiązać to szczególne ostrzeżenie, a ponadto jest to coś, czego prawie nigdy nie chcesz robić. Dlaczego 5 osób głosowało za tym, nie mam pojęcia.ini_set('error_reporting', -1);
podczas debugowania, ale nie używaj powyższych, jak zawsze.Miałem podobny problem i to wydaje się rozwiązać problem. Musisz tylko zainicjować obiekt $ res w klasie. Załóżmy, że tutaj nazwa klasy to test.
źródło
Jest to ostrzeżenie, z którym spotkałem się w PHP 7, łatwym rozwiązaniem jest zainicjowanie zmiennej przed użyciem
Po zainicjowaniu możesz go używać do obiektów
źródło
Przyczyną tego problemu jest przypisanie do instancji obiektu, który nie został zainicjowany. Na przykład:
Twój przypadek:
Rozwiązanie:
źródło
Prostym sposobem na uzyskanie tego błędu jest wpisanie poniżej (a), co oznacza wpisanie (b)
(za)
$this->my->variable
(b)
$this->my_variable
Trywialne, ale bardzo łatwe do przeoczenia i trudne do wykrycia, jeśli go nie szukasz.
źródło
_
i->
Może być konieczne sprawdzenie, czy zmienna została zadeklarowana i ma poprawny typ.
Zobacz anonimowe klasy PHP .
źródło
Miałem podobny problem podczas próby dodania zmiennej do obiektu zwróconego z interfejsu API. Iterowałem dane za pomocą pętli foreach.
To spowodowało wyjątek „Tworzenie domyślnego obiektu z pustej wartości” w Laravel.
Naprawiłem to z bardzo małą zmianą.
Po prostu czyniąc dane $ odniesieniem.
Mam nadzieję, że to komuś pomaga, to mnie denerwowało!
źródło
Najpierw pomyśl, że powinieneś utworzyć obiekt $ res = new \ stdClass ();
następnie przypisz obiekt kluczem i wartością thay $ res-> success = false;
źródło
thay
.) Jeśli chcesz, aby podział linii po jakiejś zawartości, dodaj dwie puste spacje do widocznej zawartości linii przed przerwą.nie, nie ... utworzy ją, gdy dodasz wartość obiektu do obiektu. klasa domyślna zostanie odziedziczona, jeśli jej nie określisz.
źródło
Spróbuj użyć:
źródło
Umieściłem następujące na górze pliku PHP powodującego błąd i błąd nie był już wyświetlany:
źródło