Referenz - Was bedeutet dieser Fehler bedeuten in PHP?
Was ist das?
Dies ist eine Reihe von Antworten, die über Warnungen, Fehler und Hinweise, die Sie stoßen, während die Programmierung mit PHP und haben keine Ahnung, wie Sie zu beheben. Dies ist auch ein Community-Wiki, so dass jeder ist eingeladen, das hinzufügen und die Pflege dieser Liste.
Warum ist das?
Fragen wie "Headers already sent" oder "Ruft ein Mitglied von einem nicht-Objekt" pop-up Häufig auf Stack Overflow. Die Ursache für diese Fragen ist immer die gleiche. Also die Antworten auf diese Fragen in der Regel wiederholen Sie Sie, und zeigen Sie dann die OP, welche Zeile zu ändern in Ihrem speziellen Fall. Diese Antworten, die nicht fügen Sie einen beliebigen Wert für die site, da Sie sich nur auf den OP - bestimmter code. Andere Benutzer mit dem gleichen Fehler nicht leicht zu Lesen, die Lösung heraus, weil Sie zu lokalisieren. Das ist traurig, denn sobald Sie verstanden die Ursache, Behebung der Fehler ist trivial. Daher ist diese Liste versucht zu erklären, die Lösung in einer Allgemeinen Weise, sich zu bewerben.
Was soll ich hier tun?
Wenn Ihre Frage markiert wurde als Duplikat von diesem, bitte die Fehlermeldung unten und wenden Sie das Update an Ihrem code. Die Antworten enthalten in der Regel weitere links zu untersuchen, im Fall sollte es nicht klar sein, von der Allgemeinen Antwort allein.
Wenn Sie dazu beitragen möchten, bitte fügen Sie Ihre "Lieblings" Fehlermeldung, Warnung oder Hinweis, eine pro Antwort, eine kurze Beschreibung, was es bedeutet (auch wenn es nur die Hervorhebung der Begriffe, um Ihre manual-Seite), eine mögliche Lösung oder debugging-Ansatz und eine Auflistung von vorhandenen Q&A, die von Wert sind. Auch, fühlen Sie sich frei, um zu verbessern, vorhandene Antworten.
Der Liste
- Nichts zu sehen ist. Die Seite ist leer und weiß. (auch bekannt als Weiße Seite/Bildschirm Des Todes)
- Code läuft nicht/was aussieht wie Teile meines PHP-code ausgegeben
- Warning: Cannot modify header information - headers already sent
- Warnung: mysql_fetch_array() erwartet parameter 1 to be resource, boolean given ein.k.ein.
Warnung: mysql_fetch_array(): geliefert argument ist keine gültige MySQL Ergebnis Ressource ein.k.ein.
Warning: mysqli_num_rows() erwartet parameter 1 to be mysqli_result, boolean given (oder ähnliche Variationen) - Warnung: [Funktion] erwartet parameter 1 to be resource, boolean given
- Warnung: [Funktion]: failed to open stream: [Grund]
- Warning: open_basedir restriction in effect
- Warnung: Division durch null
- Warning: Illegal string offset 'XXX'
- Achtung: count(): der Parameter muss ein array oder ein Objekt implementiert Countable
- Parse error: syntax error, unexpected '['
- Parse error: syntax error, unexpected T_XXX
- Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE
- Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
- Parse error: syntax error, unexpected 'require_once' (T_REQUIRE_ONCE), in der Erwartung, Funktion (T_FUNCTION)
- Parse error: syntax error, unexpected T_VARIABLE
- Fatal error: Allowed memory size of XXX bytes exhausted (tried to allocate XXX bytes)
- Fatal error: Call to a member function ... on a non-object oder null
- Fatal Error: Call to Undefined function XXX
- Fatal Error: Cannot redeclare XXX
- Fatal error: Can ' T use function return value in write context
- Fatal error: Declaration of AAA::BBB() muss kompatibel mit der des CCC::BBB()'
- Fatal error: Using $this when not in object context
- Hinweis: Arrays zu-string-Konvertierung
- Notice: Trying to get property of non-object Fehler
- Notice: Undefined variable oder Eigenschaft
- Notice: Undefined Index
- Notice: Undefined offset XXX [Referenz]
- Notice: Uninitialized string offset: XXX
- Notice: Use of undefined constant XXX - angenommen 'XXX'
- MySQL: Sie haben einen Fehler in Ihrer SQL-syntax; Lesen Sie im Handbuch, das entspricht Ihrer MySQL-server-version für den richtigen syntax zur Verwendung in der Nähe von ... an der Linie ...
- Strict Standards: Non-statische Methode [<Klasse>::<Methode>] sollte nicht aufgerufen werden statisch
- Warnung: die Funktion erwartet die parameter X, boolean/string/integer
- HTTP-Fehler 500 - Internal server error
Finden Sie auch unter:
Auch, bewegen, Diskussion der Kommentare, gehen Sie bitte zu dieser meta-Frage
X-Ref: PHP Parse/Syntax-Fehler; und Wie sind diese zu lösen?, an anderer Stelle: Häufige PHP-Fehlermeldungen und Lösungen
finden Sie diese coding.smashingmagazine.com/2011/11/30/... und hier auch mediawiki.org/wiki/Manual:Errors_and_symptoms
X-Ref: PHP-Fehler Befestigung (Mai 2013; von Jason McCreary)
InformationsquelleAutor |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warning: Cannot modify header information - headers already sent
Passiert, wenn das Skript versucht, senden Sie eine HTTP-header an den client, aber es war schon die Ausgabe zuvor, was dazu führte Header bereits an den client gesendet.
Dies ist ein
E_WARNING
und es wird nicht aufhören, das Skript.Ein typisches Beispiel wäre eine template Datei wie folgt:
Den
session_start()
Funktion wird versuchen, das senden der Header mit dem session-cookie an den client. Aber PHP bereits gesendeten Header, wenn er schrieb die<html>
element in den Ausgabedatenstrom. Sie hätten zu bewegen, diesession_start()
an die Spitze.Können Sie dies lösen, indem Sie gehen durch die Linien vor den code Auslösung der Warnung und prüfen, wo es Ausgänge. Verschieben Sie alle header senden von code vor dem code.
Oft vernachlässigter Ausgabe der neuen Linien nach der PHP-schließen
?>
. Es ist als eine gängige Praxis, um weglassen?>
wenn es das Letzte ist, was in die Datei. Ebenso ist eine weitere häufige Ursache für diese Warnung ist, wenn die öffnung<?php
hat einen leeren Raum, Linie, oder unsichtbare Zeichen vor, führt es zu dem web-server zu senden, der Header und die Leerzeichen/Zeilenumbruch-so, wenn PHP gestartet wird das Parsen nicht in der Lage zu unterbreiten header.Wenn Ihre Datei mehr als einen
<?php ... ?>
code-block, sollten Sie keine Leerzeichen dazwischen. (Hinweis: Sie können mehrere Blöcke, wenn Sie code, die automatisch konstruiert)Auch sicherstellen, dass Sie don ' T haben keine Byte Order Marks in deinem code, zum Beispiel, wenn die Kodierung der script ist UTF-8 mit BOM.
Fragen:
Ihre Datei hat mehr als einen block in der es..." ich bin mir nicht sicher, was das bedeutet. Was ist ein "block"? Würde einen block aus
<?php ?>
und so "mehr als ein block" wäre<?php ?> <?php ?>
?Bitte schalten Sie auf "output buffering" - Funktion in PHP.ini-Konfigurations-Datei, wenn möglich.Es ist für sloving dieses Problem.Es sendet die html-Datei gespeichert ist, den Ausgangspuffer und an den client gesendet wird erst, nachdem das Skript beendet, so dass, wenn zwei Header ausgegeben werden, am anderen Standort dann die alten header ersetzt werden, der neue header.
InformationsquelleAutor
Fatal error: Call to a member function ... on a non-object
Passiert, mit code ähnlich
xyz->method()
woxyz
ist nicht ein Objekt, und dass dahermethod
können nicht aufgerufen werden.Dies ist ein schwerwiegender Fehler, die Stoppt das script (vorwärts-Kompatibilität Hinweis: Es wird ein Abfangbarer Fehler beim starten von PHP 7).
Meist ist dies ein Zeichen, dass der code fehlt, prüft auf Fehler Bedingungen. Überprüfen Sie, dass ein Objekt selbst ein Objekt vor dem Aufruf seiner Methoden.
Einen typische Beispiel wäre
In dem obigen Beispiel die Abfrage kann nicht vorbereitet werden und
prepare()
weisenfalse
zu$statement
. Versuchen, rufen Sie dieexecute()
Methode wird dann der Fatale Fehler, weilfalse
ist ein "non-object", da der Wert ein boolean.Herausfinden warum Ihre Funktion zurückgegeben wird ein boolescher Wert anstatt eines Objektes. Zum Beispiel, überprüfen Sie die
$pdo
Objekt für den zuletzt aufgetretenen Fehler. Details, wie der debug-dies wird davon abhängen, wie Fehler behandelt werden, die für eine bestimmte Funktion/Objekt/Klasse in Frage stellen.Wenn auch die
->prepare
versagt, dann Ihre$pdo
Datenbank-handle-Objekt nicht das bekommen haben, ging Sie in den aktuellen Bereich. Finden, wo es definiert habe. Dann übergeben Sie es als parameter, speichern Sie es als Eigentum, oder teilen Sie es über den globalen scope.Ein anderes problem kann sein, bedingt ein Objekt erstellt wird und dann versucht wird, eine Methode aufzurufen, die außerhalb bedingten block. Zum Beispiel
Indem Sie versuchen, die Methode auszuführen, die außerhalb der bedingte block, wird das Objekt eventuell nicht definiert werden.
Fragen:
InformationsquelleAutor
Nichts zu sehen ist. Die Seite ist leer und weiß.
Auch bekannt als die Weiße Seite Des Todes oder White Screen Of Death. Dies geschieht, wenn die Fehlerberichterstattung deaktiviert ist und ein schwerwiegender Fehler (oft syntax-Fehler) aufgetreten ist.
Wenn Sie die Fehlerprotokollierung aktiviert, finden Sie die konkrete Fehlermeldung in der error-log. Dies wird in der Regel in einer Datei namens "php_errors.log", entweder an einem zentralen Ort (z.B.
/var/log/apache2
auf vielen Linux-Umgebungen) oder in das Verzeichnis des Skripts selbst (manchmal in einer shared hosting-Umgebung).Manchmal kann es einfacher sein, um vorübergehend aktivieren der Anzeige von Fehlern. Die weiße Seite zeigt dann die Fehlermeldung. Aufpassen, denn diese Fehler sind sichtbar für jeden, der die website besucht.
Dies kann leicht getan werden, indem Sie am Anfang des Skripts den folgenden PHP-code:
Wird der code schalten Sie die Anzeige von Fehler-und set-reporting auf höchstem Niveau.
Da die
ini_set()
wird zur Laufzeit ausgeführt, es hat keine Auswirkungen auf die parsing - /syntax-Fehler. Diese Fehler erscheinen im Protokoll. Wenn Sie möchten, die Anzeige in der Ausgabe (z.B. im browser), müssen Sie diedisplay_startup_errors
Richtlinie zutrue
. Tun Sie dies entweder in derphp.ini
oder in einem.htaccess
oder durch eine andere Methode, die sich auf die Konfiguration vor Laufzeit.Können Sie verwenden die gleichen Methoden zum festlegen der log_errors und error_log Richtlinien zu wählen, Ihre eigenen Speicherort für die Protokolldatei.
Blick in das Protokoll oder über die Anzeige, erhalten Sie eine viel bessere Fehlermeldung und die Zeile im code, wo dein Skript kommt zum Stillstand.
Fragen:
Bezogene Fehler:
error_reporting(~0);
warum nicht-1
? Das ist das, was~0
ausgewertet, und ist viel weniger kryptisch.Ich denke, beide sind ähnlich kryptisch.
~0
ist deutlicher IMO wird: Annulliere die leer-bit gesetzt, ich. e. aktivieren Sie alle flags. -1 ist nicht so gemeint, stand für «nicht gefunden» wie bei strpos() in C, aber da ein bitset mit allen flags gesetzt, denn -1 ist binäre1111'1111'1111'1111
(für 32 bit).Hoppla,
1111'1111'1111'1111
ist wirklich 16 bit, aber ich hoffe, Sie verstehen, was ich meine.Es ist E_ALL Konstante für
error_reporting
.sorry Nein, für Versionen vor 5.4,
E_STRICT
ist nicht enthalten inE_ALL
. php.net/manual/en/errorfunc.constants.php und nach unten scrollen, umE_STRICT
.InformationsquelleAutor
Notice: Undefined Index
Passiert, wenn Sie versuchen, Zugriff auf ein array mit einem Schlüssel, der nicht existiert in dem array.
Typisches Beispiel einer
Undefined Index
bemerken wäre (demo)Beide
spinach
und1
sind nicht in das array, wodurch eineE_NOTICE
ausgelöst werden.Die Lösung ist, um sicherzustellen, dass der index oder offset vorhanden ist, bevor der Zugriff auf diesen index. Dies kann bedeuten, dass Sie brauchen, um einen Fehler zu beheben in Ihrem Programm, um sicherzustellen, dass diese Indizes existieren, wenn Sie von Ihnen erwarten. Oder es kann bedeuten, dass Sie brauchen, um zu testen, ob die Indizes existieren
array_key_exists
oderisset
:Wenn Sie code haben wie:
dann
$_POST['message']
werden nicht gesetzt, wenn diese Seite zum ersten mal geladen, und Sie erhalten den oben genannten Fehler. Nur wenn das Formular abgeschickt wird und dieser code ein zweites mal ausgeführt wird der array-index vorhanden sind. Sie in der Regel prüfen, ob diese mit:Fragen:
if(!empty($_POST['message'])){ //do stuff }
InformationsquelleAutor
Warning: mysql_fetch_array() erwartet parameter 1 to be resource, boolean given
In Erster Linie:
Dies geschieht, wenn Sie versuchen zum abrufen von Daten aus dem Ergebnis der
mysql_query
aber die Abfrage ist fehlgeschlagen.Dies ist eine Warnung, und wird nicht aufhören, das Skript, aber dass dein Programm falsch.
Müssen Sie prüfen, das Ergebnis
mysql_query
durchFragen:
Bezogene Fehler:
Anderen
mysql*
Funktionen, die auch erwarten, dass ein MySQL Ergebnis Ressource als parameter den gleichen Fehler erzeugen aus dem gleichen Grund.mysql_query
ist nicht schlimm genug, hinzufügenor die
oben drauf ist das hinzufügen von Beleidigung Verletzung.Das problem, das mir begegnet ist
$res = mysql_query($query)
gibt 1 zurück, wenn die Abfrage erfolgreich, so ist es als wahr. Also wenn man das Ergebnismysql_query
zumysql_fetch_array()
die Ankündigung zeigt.Für SELECT, SHOW, DESCRIBE, EXPLAIN und andere Aussagen Rückgabe Ergebnismenge, mysql_query() gibt eine resource bei Erfolg oder FALSE bei einem Fehler. Für andere Arten von SQL-Anweisungen, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() gibt bei Erfolg TRUE zurück oder FALSE bei einem Fehler.
Das ist das problem, das ich mich vor, Insert update gibt TRUE zurück, so kann ich nicht loswerden dieser Fehler
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select
finden - gist.github.com/romelemperado/93af4cdbd44ebf3a07cbfa0e3fc539d7 Jeder Vorschlag, git diesen Fehler loszuwerden?ist für select-Abfragen, zum einfügen und aktualisieren, brauchen Sie nicht zu Holen die Ergebnismenge (und es gibt kein Ergebnis festlegen lassen, Sie Holen).
InformationsquelleAutor
Fatal error: Using $this when not in object context
$this
ist eine spezielle variable in PHP , die können nicht zugeordnet werden. Wenn auf diese zugegriffen wird, in einem Kontext, wo es nicht vorhanden ist, wird dieser schwerwiegende Fehler gegeben.Dieser Fehler auftreten kann:
Wenn eine nicht-statische Methode aufgerufen wird, statisch. Beispiel:
Wie fix: überprüfen Sie Ihren code wieder
$this
kann nur verwendet werden, in einem Objekt-Kontext, und sollte niemals verwendet werden, in der eine statische Methode. Auch eine statische Methode sollte nicht auf die nicht-statische Konstanteneigenschaft. Verwendenself::$static_property
auf die statische Eigenschaft.Wenn code aus einer Methode der Klasse kopiert wurde, wieder in eine normale Funktion oder nur die Globale Reichweite und halten die
$this
spezielle variable.Wie fix: Überprüfen Sie den code, und ersetzen Sie
$this
mit einer anderen substitution variable.Fragen:
Ich redete über einen statischen Aufruf innerhalb einer Closure. Wie
$closure = function() { self::method(); }
.Das ist eine andere Fehlermeldung: "Fatal error: Cannot access self:: wenn keine Klasse scope ist aktiv" Jedoch mit
$this
Sie auslösen können, die bespoken "Fatal error: Using $this when not in object context" :$closure = function() { $this->method(); };
InformationsquelleAutor
Fatal error: Call to undefined function XXX
Passiert, wenn Sie versuchen, eine Funktion aufzurufen, ist noch nicht definiert. Häufige Ursachen sind fehlende Erweiterungen und umfasst bedingten Funktions-Deklaration, Funktion in einer Funktion, die Erklärung oder einfache Tippfehler.
Beispiel 1 - Bedingte Funktion Erklärung
In diesem Fall
fn()
wird nie erklärt werden, weil$someCondition
ist nicht wahr.Beispiel 2 - Funktion-Funktion-Erklärung
In diesem Fall
fn
wird nur erklärt werden, sobaldcreateFn()
aufgerufen wird. Beachten Sie, dass nachfolgende AufrufecreateFn()
einen Fehler auslöst, über nochmaliges deklarieren einer von einer Bestehenden Funktion.Können Sie auch sehen, diese für eine PHP-built-in-Funktion. Versuchen Sie eine Suche für die Funktion in das offizielle Handbuch, und überprüfen Sie, welche "Erweiterung" (PHP-Modul), die er gehört, und welche Versionen von PHP unterstützen.
Im Falle einer fehlenden Erweiterung, die Installation, die Erweiterung und aktivieren Sie in php.ini. Finden Sie in den Installationsanweisungen im Handbuch von PHP für die Erweiterung Ihre Funktion angezeigt. Sie können auch in der Lage sein zu aktivieren oder installieren Sie die Erweiterung mit Ihrem Paket-manager (z.B.
apt
im Debian oder Ubuntu,yum
im Red-Hat-oder CentOS), oder ein control panel in einer shared hosting-Umgebung.Wenn die Funktion eingeführt wurde, in eine neuere version von PHP aus, was Sie verwenden, finden Sie möglicherweise links zu alternativen Implementierungen in der Betriebsanleitung oder in der Kommentar-Sektion. Wenn es entfernt wurde aus PHP, suchen Sie nach Informationen darüber, warum, wie es möglicherweise nicht mehr notwendig sein.
Im Falle von fehlenden umfasst, stellen Sie sicher, dass die Datei die Deklaration der Funktion bevor Sie die Funktion aufrufen.
Im Falle von Tippfehlern, Korrektur der Tippfehler.
Fragen:
InformationsquelleAutor
Parse error: syntax error, unexpected T_XXX
Passiert, wenn Sie
T_XXX
- token in unerwarteten Ort, unsymmetrisch (überflüssigen) Klammern, die Verwendung von kurzen tag, ohne es zu aktivieren in php.ini, und viele mehr.Fragen:
Weitere Hilfe finden Sie unter:
InformationsquelleAutor
Fatal error: Can ' T use function return value in write context
Dies geschieht meist, wenn eine Funktion verwenden, die direkt mit
empty
.Beispiel:
Dies ist, weil
empty
ist ein sprachkonstrukt und keine Funktion, es kann nicht aufgerufen werden, mit einem Ausdruck als argument in PHP-Versionen vor 5.5. Vor PHP 5.5, das argument zuempty()
muss ein variable, aber ein beliebiger Ausdruck (wie ein return-Wert einer Funktion) ist zulässig in PHP 5.5+.empty
trotz seines namens, nicht wirklich überprüfen, ob eine variable "leer" ist. Stattdessen prüft, ob eine variable nicht vorhanden ist, oder== false
. Ausdrücke (wieis_null(null)
im Beispiel) wird immer als vorhanden, so dass hierempty
nur überprüfen, ob ist es gleich falsch. Sie ersetzen könnteempty()
hier mit!
z.B.if (!is_null(null))
oder explizit zu vergleichen, um falsche, z.B.if (is_null(null) == false)
.Fragen:
InformationsquelleAutor
MySQL: Sie haben einen Fehler in Ihrer SQL-syntax; Lesen Sie im Handbuch, das entspricht Ihrer MySQL-server-version für den richtigen syntax zur Verwendung in der Nähe von ... an der Linie ...
Dieser Fehler wird Häufig dadurch verursacht, weil Sie vergessen haben, richtig zu entkommen, werden die Daten an eine MySQL-Abfrage.
Ein Beispiel von dem, was nicht zu tun (das "Schlechte Idee"):
Dieser code könnte sich eine Seite mit einem Formular Einreichen, mit einer URL wie http://example.com/edit.php?id=10 (Bearbeiten der post n°10)
Was passieren wird, wenn der vorgelegte text enthält einzelne Zitate?
$query
werden am Ende mit:Sind, und wenn diese Anfrage wird an MySQL, es wird sich beschweren, dass die syntax falsch ist, weil es ein zusätzliches Apostroph in der Mitte.
Um solche Fehler zu vermeiden, Sie MUSS immer entkommen, bevor die Daten in einer Abfrage verwenden.
Flucht Daten vor der Verwendung in einer SQL-Abfrage ist auch sehr wichtig, denn wenn Sie nicht, Ihr Skript wird offen für SQL-injections. Eine SQL-injection verursachen Veränderung, Verlust oder änderung eines Datensatz, eine Tabelle oder eine ganze Datenbank. Dies ist eine sehr ernste Frage der Sicherheit!
Dokumentation:
mysql_real_escape_string()
mysqli_real_escape_string()
Klicken Sie auf "Bearbeiten" und ändern Sie die Antwort. Ich bin mir bewusst, dass es verbessert werden kann.
Oder verwenden Sie eine vorbereitete sql-Abfrage.
InformationsquelleAutor
Fatal error: Allowed memory size of XXX bytes exhausted (tried to allocate XXX bytes)
Es ist nicht genügend Arbeitsspeicher zum ausführen von Skripts. PHP hat erreicht das memory limit und beendet die Ausführung. Dieser Fehler ist fatal, wird das Skript beendet. Der Wert der memory limit kann konfiguriert werden, entweder in der
php.ini
- Datei oder mitini_set('memory_limit', '128 M');
im Skript (das überschreibt den Wert definiert inphp.ini
). Der Zweck des memory limit ist zu verhindern, dass ein einzelnes PHP-Skript von verschlang alle verfügbaren Speicher und bringen die ganze web-server down.Das erste, was zu tun ist, um zu minimieren die Menge von Speicher, die Ihr Skript benötigt. Zum Beispiel, wenn beim Lesen einer großen Datei in eine variable oder Holen viele Datensätze aus einer Datenbank und speichern Sie alle in ein array, das kann sehr viel Arbeitsspeicher. Ändern Sie Ihren code, um stattdessen Lesen Sie die Datei zeilenweise ein-oder fetch-Datenbank Datensätze ein zu einer Zeit, ohne zu speichern Sie alle in den Speicher. Dies erfordert ein bisschen eine konzeptionelle Bewusstsein von dem, was passiert hinter den kulissen und als Daten im Speicher vs. anderswo.
Wenn dieser Fehler aufgetreten, wenn Ihr Skript wurde keine Speicher-intensiven arbeiten, müssen Sie überprüfen Sie Ihren code, um zu sehen, ob es ein memory leak. Die
memory_get_usage
- Funktion ist dein Freund.Fragen:
InformationsquelleAutor
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE
Dieser Fehler tritt meist auf, wenn beim Versuch, eine Referenz zu einem array-Wert mit einem zitiert Schlüssel für die interpolation in Strings mit doppelten Anführungszeichen, wenn der gesamte Komplex variables Konstrukt ist nicht eingeschlossen in
{}
.Der Fehler-case an:
Dadurch wird
Unexpected T_ENCAPSED_AND_WHITESPACE
:Lösungsansätze:
In einem double-quoted string, PHP erlauben array mit Schlüssel-Zeichenfolgen verwendet werden nicht börsennotierten, und wird nicht ein Problem
E_NOTICE
. Also, die oben geschrieben werden kann als:Den gesamten Komplex, der array-Variablen und key(s) kann eingeschlossen werden, in
{}
, in welchem Fall Sie sollte werden zitiert, um zu vermeiden, dass eineE_NOTICE
. Die PHP-Dokumentation empfiehlt diese syntax für komplexe Variablen.Natürlich, die alternative zu alle von den oben genannten ist die Verkettung von array-Variablen, die statt der Interpolation:
Referenz, siehe den Abschnitt über Variable Parsing in die PHP-Strings-Handbuch Seite
InformationsquelleAutor
Warnung: [Funktion]: failed to open stream: [Grund]
Ist es passiert, beim Aufruf einer Datei in der Regel durch
include
,require
oderfopen
und PHP konnte die Datei dann nicht finden oder habe nicht genug Berechtigung um die Datei zu laden.Dafür kann es verschiedene Gründe :
Ein häufiger Fehler ist das nicht ein absoluter Pfad verwendet werden. Dies kann leicht gelöst, indem Sie einen vollständigen Pfad oder Magische Konstanten wie
__DIR__
oderdirname(__FILE__)
:oder:
Gewährleistung der richtige Pfad verwendet wird, ist ein Schritt der Fehlerbehebung, dies kann auch im Zusammenhang mit nicht vorhandenen Dateien, Rechte des Dateisystems verhindern den Zugang oder open basedir restrictions, die von PHP selbst.
Der beste Weg, um dieses problem zu lösen schnell, ist Folgen Sie der Checkliste für die Fehlersuche unten.
Fragen:
Bezogene Fehler:
InformationsquelleAutor
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM
Den scope-resolution-operator wird auch als "Paamayim Nekudotayim" aus dem hebräischen פעמיים נקודתיים. was bedeutet "doppelter Doppelpunkt" oder "double dot zweimal".
Dieser Fehler tritt normalerweise auf, wenn Sie versehentlich setzen
::
im code.Fragen:
Dokumentation:
a()::b;
oder$a=::;
.Aah, die Schönheit der T_PAAMAYIM_NEKUDOTAYIM...
InformationsquelleAutor
Fatal error: Cannot redeclare class [class name]
Fatal error: Cannot redeclare [function name]
Das heißt, Sie sind entweder mit der gleichen Funktion/Klasse name zweimal und umbenennen müssen, einer von Ihnen, oder es ist, weil Sie verwendet haben
require
oderinclude
wo Sie sollten mitrequire_once
oderinclude_once
.Wenn eine Klasse oder eine Funktion deklariert ist in PHP, es ist unveränderlich, und können später nicht deklariert werden, mit einem neuen Wert.
Betrachten Sie den folgenden code:
class.php
index.php
Den zweiten Anruf zu
do_stuff()
produzieren den oben genannten Fehler. Durch die änderungrequire
zurequire_once
können wir sicher sein, dass Sie die Datei mit der definition derMyClass
wird nur einmal geladen werden, und die Fehler werden vermieden.InformationsquelleAutor
Notice: Use of undefined constant XXX - angenommen 'XXX'
oder, in PHP 7.2 oder höher:
Warnung: Use of undefined constant XXX - angenommen 'XXX' (das wirft einen Fehler in einer zukünftigen version von PHP)
Dieser Hinweis tritt auf, wenn ein token im code verwendet wird, und wirkt wie eine Konstante, aber eine Konstante mit diesem Namen ist nicht definiert.
Einer der häufigsten Ursachen für diese Benachrichtigung ist ein Fehler beim zitieren ein string, der verwendet wird als ein assoziatives array Schlüssel.
Beispiel:
Eine weitere häufige Ursache ist eine fehlende
$
(dollar) - Zeichen vor einer Variablen-name:Oder vielleicht haben Sie falsch einige andere Konstante oder ein Schlüsselwort:
Es kann auch ein Zeichen dafür, dass eine benötigte PHP-extension oder-Bibliothek fehlt, wenn Sie versuchen, auf eine Konstante definiert durch die Bibliothek.
Fragen:
InformationsquelleAutor
Notice: Undefined variable
Passiert, wenn Sie versuchen, eine variable zu verwenden, die nicht zuvor definiert ist.
Ein typisches Beispiel wäre
Wenn Sie nicht definieren
$counter
vor, der obige code löst die Ankündigung.Der richtige Weg wäre, um die variable, bevor es zu benutzen, selbst wenn es sich nur um eine leere Zeichenfolge wie
Notice: Undefined property
Dieser Fehler bedeutet, viel die gleiche Sache, sondern bezieht sich auf eine Eigenschaft eines Objekts. Wiederverwendung obigen Beispiel, dieser code würde die den Fehler auslösen, weil die
counter
- Eigenschaft wurde nicht festgelegt.Fragen:
InformationsquelleAutor
Notice: Uninitialized string offset:
*
Wie der name zeigt, eine solche Art von Fehler tritt auf, wenn Sie wahrscheinlich versuchen zu Durchlaufen, oder finden Sie einen Wert aus einem array mit einem nicht vorhandenen Schlüssel.
Berücksichtigen Sie, werden versuchen zu zeigen, jeden Brief von
$string
Obigen Beispiel erzeugen (online-demo):
Und, sobald das Skript beendet ist echo
D
Sie erhalten die Fehlermeldung, da innerhalb derfor()
- Schleife, Sie haben gesagt, PHP, Ihnen zu zeigen, die vom ersten bis zum fünften string, Zeichen aus'ABCD'
, Die vorhanden ist, aber da die Schleife beginnt zu zählen, von0
und EchosD
durch die Zeit, erreicht zu4
ist, wird es werfen Sie einen offset-Fehler.Ähnliche Fehler:
InformationsquelleAutor
Parse error: syntax error, unexpected T_VARIABLE
Mögliches Szenario
Ich kann nicht scheinen, um herauszufinden, wo mein code nicht stimmt. Hier ist mein voller Fehler:
Was ich versuche
Antwort
Parse error: Ein problem mit der syntax des Programms, so beispielsweise ein Semikolon aus der das Ende einer Anweisung oder, wie in dem Fall oben, fehlt der
.
Betreiber. Der interpreter nicht mehr läuft Ihr Programm, wenn es auf einen parse-error.In einfachen Worten ist dies ein syntax-Fehler, was bedeutet, dass es etwas in Ihrem code zu stoppen es wird korrekt analysiert und daher laufen.
, Was Sie tun sollten, ist, überprüfen Sie es sorgfältig an den Linien herum, wo der Fehler ist für jede einfache Fehler.
Dass Fehlermeldung bedeutet, dass in Zeile x der Datei, die PHP-interpreter, die erwartet wurde, um zu sehen, ein öffnen der Klammer, aber stattdessen traf er auf etwas namens
T_VARIABLE
. DassT_VARIABLE
Ding heissttoken
. Es ist der PHP-interpreter den Ausdruck für die verschiedene grundlegende Bestandteile von Programmen. Wenn der interpreter liest ein Programm, es übersetzt, was du geschrieben hast, in eine Liste von tokens. Wo auch immer Sie eine variable in Ihrem Programm, es ist einT_VARIABLE
token in die Interpreten-Liste.Good read: List of Parser Tokens
So stellen Sie sicher, dass Sie aktivieren Sie mindestens
E_PARSE
in Ihremphp.ini
. Parse-errors sollte nicht in der Produktion scripts.Habe ich immer empfohlen, fügen Sie die folgende Anweisung, während Codierung:
PHP error reporting
Auch eine gute Idee, verwenden Sie eine IDE, die wird Sie wissen lassen, analysieren, Fehler während der Eingabe. Sie verwenden können:
Fragen:
InformationsquelleAutor
Warning: open_basedir restriction in effect
Diese Warnung kann erscheinen, mit verschiedenen Funktionen, die verwandt sind, um Datei-und Verzeichniszugriff. Es warnt über ein Konfigurations-Problem.
Wenn es erscheint, es bedeutet, dass der Zugriff verboten wurde, um einige Dateien.
Die Warnung sich nicht etwas zu brechen, aber die meisten oft ein Skript nicht richtig funktionieren, wenn die Datei-Zugriff verhindert.
Das Update ist normalerweise ändern die Die PHP-Konfiguration, die zugehörige Einstellung namens
open_basedir
.Manchmal die falschen Datei-oder Verzeichnisnamen verwendet werden, das Update ist dann zu verwenden, die richtigen sind.
Fragen:
InformationsquelleAutor
Parse error: syntax error, unexpected '['
Dieser Fehler kommt in zwei variatians:
Variante 1
Diese array-Initialisierer-syntax wurde nur eingeführt in PHP 5.4; es wird sich erheben ein parser-Fehler, die auf Versionen vor. Wenn möglich, aktualisieren Sie Ihre installation oder die Verwendung der alten syntax:
Siehe auch dieses Beispiel aus der Anleitung.
Variante 2
Array-Dereferenzierung Funktion Ergebnisse wurde auch eingeführt in PHP 5.4. Wenn es nicht möglich ist zu aktualisieren, müssen Sie verwenden, eine (temporäre) variable:
Siehe auch dieses Beispiel aus der Anleitung.
InformationsquelleAutor
Notice: Trying to get property of non-object Fehler
Passiert, wenn Sie versuchen, auf eine Eigenschaft eines Objekts, während kein Objekt vorhanden ist.
Ein typisches Beispiel für eine nicht-Objekt-Benachrichtigung würde
In diesem Fall
$users
ist ein array (also kein Objekt) und es hat keine Eigenschaften.Dies ist ähnlich zu dem Zugriff auf einen nicht vorhandenen index oder key in einem array (siehe Notice: Undefined Index).
Diesem Beispiel ist sehr vereinfacht. Die meisten oft solche Ankündigung Signale einen ungeprüften Wert zurückgeben, z.B. wenn eine Bibliothek gibt
NULL
wenn ein Objekt nicht vorhanden ist oder einfach nur eine unerwartete nicht-Objekt-Wert (z.B. in einem Xpath-Ergebnis JSON-Strukturen mit unerwarteten format, XML mit einem unerwarteten format etc.) aber der code wird nicht überprüft, ob eine solche Bedingung.Als nicht-Objekte werden oft weiterverarbeitet, oft ein fataler Fehler passiert beim Aufruf einer Objekt-Methode auf einem nicht-Objekt (siehe: Fatal error: Call to a member function ... on a non-object) stoppen das Skript.
Es kann einfach vermieden werden, indem für Fehler-Bedingungen, und/oder daß eine variable entspricht einer Erwartung. Hier die entsprechende Mitteilung mit einer DOMXPath Beispiel:
Das problem ist der Zugriff auf die
nodeValue
Eigenschaft (Feld) des ersten Elements, während es wurde nicht überprüft, ob es vorhanden ist oder nicht in der$result
Sammlung. Stattdessen zahlt, um den code deutlicher durch die Zuordnung von Variablen zu den Objekten der code funktioniert auf:Bezogene Fehler:
json_decode
jetzt gibt eine Instanzstdclass
standardmäßig, so dass der Beispiel-code würde eigentlich funktionieren.Es ist tatsächlich nicht (und immer habe) ein array zurückgeben, für das Beispiel: 3v4l.org/SUDe0 - können Auch Sie bitte die Referenz für Ihr schreiben, dass "
json_decode
jetzt gibt eine Instanzstdclass
standardmäßig" ? Ich kann nicht finden, dass in der changelog.Laut PHP-Handbuch-Seite auf json_decode, standardmäßig, die
assoc
parameter auf false gesetzt ist. Dieser parameter entscheidet, ob die Funktion gibt einenstdclass
statt von einem assoziativen array.InformationsquelleAutor
Warnung: [Funktion] erwartet parameter 1 to be resource, boolean given
(Eine allgemeinere Variante von Warnung: mysql_fetch_array() erwartet parameter 1 to be resource, boolean given)
Ressourcen sind ein geben in PHP (wie strings, Integer oder Objekte). Eine Ressource ist eine undurchsichtige blob mit keine von Natur aus sinnvollen Wert. Eine Ressource ist spezifisch und definiert durch einen bestimmten Satz von PHP-Funktionen oder-Erweiterung. Zum Beispiel die Mysql-Erweiterung definiert zwei resource-Typen:
Die cURL-Erweiterung definiert ein weiteres zwei Ressource-Typen:
Wenn
var_dump
ed, die Werte wie folgt Aussehen:Dass alles, was, die meisten Ressourcen sind, einen numerischen Bezeichner (
(1)
) eines bestimmten Typs ((curl)
).Tragen Sie diese Ressourcen um und geben Sie Sie in verschiedenen Funktionen, für die eine solche Ressource etwas bedeutet. In der Regel werden diese Funktionen die Bereitstellung bestimmter Daten im hintergrund und eine Ressource ist nur eine Referenz, die Sie verwenden, um zu verfolgen, diese Daten intern.
"... Erwartet parameter 1 to be resource, boolean given" Fehler ist normalerweise das Ergebnis eines unkontrollierten Betrieb, die angenommen wurde, um eine Ressource zu erstellen, kehrte aber
false
statt. Zum Beispiel, diefopen
- Funktion hat diese Beschreibung:So, in diesem code
$fp
wird entweder einresource(x) of type (stream)
oderfalse
:Wenn Sie nicht überprüfen, ob die
fopen
operation erfolgreich war oder fehlgeschlagen ist, und ob folglich$fp
ist eine gültige Ressource oderfalse
und pass$fp
zu einer anderen Funktion, die erwartet, dass eine Ressource, erhalten Sie möglicherweise die oben genannten Fehlermeldung:Muss man immer Fehlermeldung überprüfen Sie den Rückgabewert von Funktionen, die versuchen, eine Ressource zu reservieren und kann nicht:
Bezogene Fehler:
InformationsquelleAutor
Warnung: Illegal string offset 'XXX'
Dies geschieht, wenn Sie versuchen, Zugriff auf ein array-element mit der eckigen Klammer-syntax, aber Sie tun dies auf eine Zeichenfolge, und nicht auf ein array, so dass der Betrieb deutlich nicht sinnvoll.
Beispiel:
Wenn Sie denken, sollte die variable ein array ist, sehen, wo es herkommt und beheben das problem gibt.
InformationsquelleAutor
Code läuft nicht/was aussieht wie Teile meines PHP-code ausgegeben
Wenn Sie kein Ergebnis von Ihrem PHP-code zu löschen und/oder Sie sehen, Teile Ihrer wörtlichen PHP-source-code-Ausgabe in der Webseite, können Sie ziemlich sicher sein, dass Ihre PHP-ist das nicht eigentlich immer ausgeführt. Wenn Sie Quelltext Anzeigen " in Ihrem browser, sind Sie wahrscheinlich zu sehen, das ganze PHP-source-code-Datei, wie Sie ist. Da PHP-code eingebettet ist in
<?php ?>
- tags, die der browser wird versuchen, Sie zu interpretieren diese HTML-tags und kann das Ergebnis etwas verwirrt.Tatsächlich führen Sie Ihren PHP-Skripten, die Sie brauchen:
* es sei denn, Sie konfigurieren es, alles kann konfiguriert werden.
Dieses Letzte ist besonders wichtig. Einfach doppelt auf die Datei wahrscheinlich öffnen Sie in Ihrem browser über eine Adresse wie:
Diese ist komplett unter Umgehung jeder web-server müssen Sie möglicherweise ausführen und die Datei wird nicht immer interpretiert werden. Müssen Sie besuchen Sie die URL der Datei auf Ihrem web-server, wahrscheinlich so etwas wie:
Möglicherweise möchten Sie auch zu überprüfen, ob Sie mit short open tags
<?
statt<?php
und Ihre PHP-Konfiguration aktiviert hat, werden short open tags auf off.Siehe auch PHP-code wird nicht ausgeführt, statt-code zeigt auf der Seite
InformationsquelleAutor
Warning: mysql_connect(): Access denied for user 'name'@'host'
Diese Warnung wird angezeigt, wenn Sie eine Verbindung zu einer MySQL/MariaDB-server mit ungültige oder fehlende Anmeldeinformationen (Benutzername/Passwort). So ist dies in der Regel nicht ein code-problem, sondern ein server-Konfigurations-Problem.
Siehe die manual-Seite zu
mysql_connect("localhost", "user", "pw")
für Beispiele.Überprüfen, dass Sie tatsächlich verwendet ein
$username
und$password
.(using password: NO)
.Nur auf dem lokalen test-server in der Regel erlaubt, um eine Verbindung mit Benutzername
root
, kein Passwort, und dietest
Datenbank-Namen.Können Sie testen, ob Sie wirklich richtig mit dem Kommandozeilen-client:
mysql --user="username" --password="password" testdb
Benutzername und Passwort sind groß-und Kleinschreibung und whitespace ist nicht ignoriert. Wenn Sie Ihr Passwort enthält meta-Zeichen wie
$
-, Flucht -, oder setzen Sie das Kennwort in einfache Anführungszeichen.Den meisten shared-hosting-Provider predeclare mysql-Konten in Bezug auf die unix-Benutzer-Konto (manchmal auch nur Präfixe oder zusätzliche numerische Suffixe). Siehe die Dokumentation für ein Muster oder eine Dokumentation, CPanel oder was auch immer-Schnittstelle für das einrichten eines Kennworts.
Siehe MySQL-Handbuch auf Hinzufügen von Benutzer-accounts über die Befehlszeile. Wenn verbunden, wie admin-Benutzer können Sie eine Abfrage wie:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'newpassword';
Oder verwenden Sie Adminer oder WorkBench oder andere grafische tool für das erstellen, überprüfen oder korrigieren von Kontoinformationen.
Wenn Sie nicht beheben können Ihre Anmeldeinformationen ein, dann fragt das internet, um "bitte um Hilfe" haben keine Wirkung. Nur Sie und Ihre hosting-Anbieter, Berechtigungen und ausreichenden Zugang zu diagnostizieren und zu beheben Dinge.
Stellen Sie sicher, dass Sie erreichen konnte der Datenbank-server den host-Namen von Ihrem provider:
ping dbserver.hoster.example.net
Überprüfen Sie diese aus einer SSH-Konsole direkt auf Ihrem webserver. Tests von Ihrem lokalen development-client auf Ihren shared-hosting-server ist nur selten sinnvoll.
Oft Sie wollen einfach nur die server-Namen werden
"localhost"
, die in der Regel nutzt eine lokale named Steckdose, wenn vorhanden. Othertimes können Sie versuchen"127.0.0.1"
als fallback.Sollten Sie Ihre MySQL - /MariaDB-server einen anderen port abhört, dann verwenden Sie
"servername:3306"
.Wenn das fehlschlägt, dann gibt es vielleicht ein firewall-Problem. (Off-topic, nicht eine Frage der Programmierung. Kein remote-erraten-Unterstützung möglich.)
Bei der Verwendung Konstanten wie z.B.
DB_USER
oderDB_PASSWORD
überprüfen, dass Sie tatsächlich definiert.Wenn Sie eine
"Warning: Access defined for 'DB_USER'@'host'"
und ein"Notice: use of undefined constant 'DB_PASS'"
, dann ist das dein problem.Stellen Sie sicher, dass Ihr z.B.
xy/db-config.php
war eigentlich enthalten, und whatelse.Prüfen korrekt einstellen
GRANT
Berechtigungen.Es ist nicht ausreichend, um eine
username
+password
- pair-Mädchen.Jede MySQL - /MariaDB-Konto kann über einen angefügten Satz von Berechtigungen.
Diese können einschränken, welche Datenbanken Sie sind berechtigt, die für die Verbindung von dem client - /server kann die Verbindung stammen, und die Abfragen sind zulässig.
Den "Zugriff verweigert" - Warnung, so kann auch zeigen, bis für
mysql_query
Anrufe, wenn Sie nicht über die Berechtigungen zumSELECT
aus einer bestimmten Tabelle oderINSERT
/UPDATE
und häufigerDELETE
nichts.Können Sie Konto-Berechtigungen anpassen bei Anschluss per command line client mit dem admin-Konto mit einer Abfrage wie:
GRANT ALL ON yourdb.* TO 'username'@'localhost';
Wenn die Warnung auftaucht, zuerst mit
Warning: mysql_query(): Access denied for user ''@'localhost'
dann haben Sie möglicherweise eine php.ini-vorkonfiguriert-Konto/Passwort-paar.Überprüfen Sie, dass
mysql.default_user=
undmysql.default_password=
haben sinnvolle Werte.Oftmals ist dies ein provider-Konfiguration. So Kontaktieren Sie Ihre Unterstützung für Abweichungen.
Finden Sie in der Dokumentation zu Ihrem shared-hosting-Anbieter:
z.B. HostGator, GoDaddy, 1und1, DigitalOcean, BlueHost, DreamHost, MediaTemple, ixWebhosting, lunarhosting, oder google einfach verkaufen.
Sonst Fragen Sie Ihren webhosting-Anbieter, über Ihre support-Kanäle.
Beachten Sie, dass Sie möglicherweise auch erschöpft die verfügbare Verbindung, pool. Erhalten Sie, Zugriff verweigert Warnungen bei zu vielen gleichzeitigen verbindungen. (Sie müssen untersuchen Sie das setup. Das ist ein off-topic server-Konfigurations-Problem, nicht eine Frage der Programmierung.)
Ihre libmysql-client version möglicherweise nicht kompatibel mit dem Datenbank-server. Normalerweise MySQL und MariaDB-Server erreicht werden können mit PHPs kompiliert und im Treiber. Wenn Sie eine benutzerdefinierte Installation oder eine veraltete PHP-version, und eine viel neuere Datenbank-server, oder deutlich überholt - dann die version mismatch kann verhindern, dass verbindungen. (Nein, Sie müssen sich untersuchen. Niemand kann erraten, Ihren Einstellungen).
Mehr Referenzen:
Ha, ganz vergessen! (Wahrscheinlich letzten verwendet, die mit PHP3 oder so..)
InformationsquelleAutor
Hinweis: Arrays zu-string-Konvertierung
Dies geschieht einfach, wenn Sie versuchen zu behandeln, die ein array als string:
Einem array nicht einfach
echo
'd oder verbunden mit einem string, denn das Ergebnis ist nicht gut definiert. PHP wird mit der string "Array" statt der array und lösen die Ankündigung darauf hin, dass das wahrscheinlich nicht das, was beabsichtigt war, und dass Sie überprüfen sollten Sie Ihren code hier ein. Sie wollen wahrscheinlich etwas wie dies:Oder Schleife das array:
Wenn dieser Hinweis erscheint irgendwo, wo man es nicht erwartet, es bedeutet, dass eine variable, die Sie denken ist ein string eigentlich ein array. Das heißt, Sie haben einen Fehler in deinem code, was macht diese variable ein array statt einem string verwendet wird, die Sie erwarten.
InformationsquelleAutor
Warnung: Division durch null
Die Warnung "Division durch null' ist eine der am häufigsten gestellten Fragen unter neuen PHP-Entwickler. Dieser Fehler werde nicht dazu führen, eine Ausnahme, deshalb, einige Entwickler werden gelegentlich unterdrücken Sie die Warnung, indem die Fehler-Unterdrückung operator @ vor dem Ausdruck. Zum Beispiel:
Aber, wie bei jeder Warnung, der beste Ansatz wäre, auf die Spur der Ursache für die Warnung und es zu lösen. Die Ursache der Warnung wird kommen, von der jede Instanz, wo Sie versuchen, Division durch 0, eine variable gleich 0 ist, oder eine variable, die nicht zugewiesen wurde (weil NULL == 0), weil das Ergebnis 'nicht definiert'.
Um dieses Problem zu beheben, sollten Sie schreiben Sie Ihre expression zu überprüfen, dass der Wert nicht 0, wenn es ist, etwas anderes zu tun. Wenn der Wert null ist, sollten Sie nicht teilen, oder ändern Sie den Wert auf 1 und dann teilen, so dass die division in das äquivalent aufgeteilt, die nur durch die zusätzliche variable.
Fragen:
Für dieses Beispiel, wenn
$var1
nicht == 0 ist, dann können Sie nur setzen$var3
zu$var2
. Auch wenn, dies nicht zu tun, die andere ist überhaupt nicht notwendig, da die Zuordnung ist in beiden Fällen identisch, so dass kein anderes, und weisen außerhalb derif
InformationsquelleAutor
Strict Standards: Non-statische Methode [<Klasse>::<Methode>] sollte nicht aufgerufen werden statisch
Tritt auf, wenn Sie versuchen, rufen Sie eine nicht-statische Methode in einer Klasse als es war statisch, und Sie haben auch die
E_STRICT
- flag in Ihremerror_reporting()
Einstellungen.Beispiel :
HTML::br()
oder$html::br()
Kann man eigentlich vermeiden, diese Fehler nicht durch das hinzufügen
E_STRICT
zuerror_reporting()
, z.B.da für PHP 5.4.0 und oben
E_STRICT
ist enthalten inE_ALL
[ref]. Aber das ist nicht adviceable. Die Lösung ist, um zu definieren, Ihre beabsichtigte statische Funktion als tatsächlichestatic
:oder rufen Sie die Funktion konventionell :
Fragen :
InformationsquelleAutor
Fatal error: [TraitA] und [TraitB] definieren, die die gleiche Eigenschaft ([$x]) in der Zusammensetzung von [ClassC]
Tritt auf, wenn eine Klasse versucht zu
mehrere Züge, wo zwei oder mehr von diesen Eigenschaften haben definiert eine Eigenschaft mit dem gleichen Namen, und mit der Eigenschaft, dass unterschiedliche Ausgangswerte.
Beispiel:
Problematisch: es ist Zwar möglich, Konflikte zu lösen zwischen konkurrierende Methoden, derzeit gibt es keine syntax, die zur Lösung eines Konflikts zwischen zwei konkurrierenden Eigenschaften. Die einzige Lösung in dieser Zeit ist zu umgestalten; d.h., vermeiden Sie einen Konflikt zwischen den Namen der Eigenschaft, erzeugt einen fatalen Fehler.
Fragen:
InformationsquelleAutor