2016-07-28 22 views
5

Używałem PHP 7.0.4 i wszystko działało sprawnie, a ja po prostu zaktualizowałem do wersji 7.0.8 i zacząłem dostawać takie błędy na całym miejsce."Błąd krytyczny: nie można zadeklarować klasy" po aktualizacji do wersji 7.0.8

Czy ktoś ma pojęcie o tym, co się dzieje, czytałem dzienniki zmian, ale to jest aktualizacja łatki, która nie powinna niczego uszkodzić?

Dodatkowo, jeśli nie znaleziono rozwiązania tego problemu, w jaki sposób mogę przejść z powrotem do wersji 7.0.4? (Używam Ubuntu 16.04 i po prostu zaktualizowany do wydania punkt)

Podsumowując komentarze do tej pory:

  • Próbowałem wyłączenie opcache to nie rozwiązuje problemu
  • używam autoloader kompozytora - nie używam require ani include w dowolnym miejscu.
  • Ten błąd występuje w przypadku wielu klas, więc wyraźnie nie jest to kwestia kodu (z mojej strony), ponadto kod działał, zanim zaktualizowałem go do wersji 7.0.8
+1

Czy chcesz udostępnić naruszający kod? – Machavity

+0

@Machavity To nie jest jedna klasa, jeśli usunę tę klasę z kodu, wtedy inna klasa wyśle ​​ten błąd, jest to coś w PHP, ponieważ, jak powiedziałem, wszystko działało dobrze do 30 minut temu. –

+0

komunikat o błędzie wydaje się jasny –

Odpowiedz

1

Cóż, najwyraźniej byłem tak zaślepiony faktem, że błąd zaczął się pojawiać po aktualizacji, że zignorowałem to, mimo że było to na moich oczach.

Są to pierwsze kilka wierszy z danej klasy (i najwyraźniej kilka innych klasach):

<?php 

namespace Plugins\Users; 

use FW\Utility\Models\Plugins\Plugin; 

class Plugin extends Plugin { 

jak ty, i wreszcie, można wyraźnie zobaczyć, nazwa klasy Plugin jest niejednoznaczne, ale nie było w 7.0.4, która jest dziwne i jest prawdopodobnie spowodowany przez bug opisaną w bishop „s answer

Guess powinny słuchałem Machavity, huh.

+0

Dobrze, że to naprawiłeś;) – Machavity

4

Nie ma wystarczającej ilości danych, aby powiedzieć jednoznacznie, jednak podejrzewam, że opcache. Ten błąd w rzeczywistości, originates in opcache, więc podejrzewam, że do tego momentu błąd został ukryty przez jeden z kilku błędów opcode, prawdopodobnie #66773.

Naprawdę masz problem z automatycznym ładowaniem, który należy naprawić. Zmień nazwę klasy, sprawdź przestrzenie nazw i usuń wszelkie trudne wymagania.

Możesz może być w stanie przywrócić poprzednie błędne zachowanie poprzez wyłączenie/ponowne włączenie opcache lub powrót do wersji 7.0.4, ale tak naprawdę błąd został zamaskowany tylko przez szczególną kombinację automatycznego ładowania i opcache. W rzeczywistości było to tylko przypadkiem, że kwestia pozostała niewykryta do tej pory i tylko przez przypadek będzie można ją ponownie zamaskować.

Najlepszym rozwiązaniem jest naprawienie problemu.