Ich bin mir ziemlich sicher, dass die Antwort auf diese Frage nein ist, aber falls es einen PHP-Guru gibt
ist es möglich, eine Funktion so zu schreiben, dass ungültige Argumente oder nicht existierende Variablen übergeben werden können und php ohne die Verwendung von '@'
Ähnlich wie leer und isset. Sie können eine Variable übergeben, die Sie gerade erfunden haben, und es wird kein Fehler auftreten.
%Vor%Zusammenfassend ist die richtige Antwort nein, Sie sollten nicht (siehe unten).
Es gibt Workarounds, die von vielen Leuten in diesem Thread bereits erwähnt wurden, wie die Verwendung von Referenzvariablen oder isset () oder empty () in Bedingungen und die Unterdrückung von Hinweisen in der PHP-Konfiguration. Das zusätzlich zu der offensichtlichen Problemumgehung mit @, die Sie nicht möchten.
Fassen Sie eine interessante Kommentardiskussion mit Gerry zusammen: Die Übergabe der Variable per Referenz ist in der Tat gültig, wenn Sie nach suchen der Wert der Variablen innerhalb der Funktion und unkorrekte oder Null-Fälle richtig behandeln. Verwenden Sie die Referenzübergabe nicht als Möglichkeit, PHP hochzufahren (hier sollte mein Original nicht zeigen).
Sie können dies mit func_get_args wie folgt tun:
%Vor%Diese Funktion geht noch einen Schritt weiter und würde Ihnen den ersten nicht leeren Wert einer beliebigen Anzahl von Argumenten geben (Sie könnten es immer zwingen, nur bis zu zwei Argumente zu verwenden, aber das sieht für mich besser so aus).
>EDIT: ursprüngliche Version nicht verwendet, um zu versuchen, ein Array von Argumenten zu machen und STILL gab einen Fehler. Die Fehlerberichte sind eine Stufe höher geworden und diese neue Version mit Kompakt ist etwas weniger aufgeräumt, macht aber immer noch dasselbe und erlaubt Ihnen, einen Standardwert für nicht vorhandene Vars anzugeben.
Nein, weil das mit der Funktion eigentlich nichts zu tun hat; Der Fehler tritt auf, wenn versucht wird, einen nicht vorhandenen Array-Schlüssel zu referenzieren. Sie können die Warnstufe Ihres PHP-Setups ändern, um diese Fehler zu unterdrücken, aber Sie tun dies besser nicht.
Nachdem Sie das gesagt haben, könnten Sie > etwas tun wie
%Vor%Und verwenden Sie es anstelle von Array-Schlüsselsuche
%Vor%Jetzt muss ich duschen:)
ist es möglich, eine Funktion so zu schreiben, dass ungültige Argumente oder nicht existierende Variablen übergeben werden können und php ohne die Verwendung von '@'
kein Fehler ist
Ja, das kannst du!
porneL ist korrekt [Bearbeiten: Ich habe nicht genug Punkte, um auf seine Antwort zu verlinken oder abzustimmen, aber es ist auf dieser Seite]
Er ist auch richtig, wenn er warnt "Aber ich empfehle, dies zu missbrauchen, um Programmierfehler zu verbergen." Aus demselben Grund sollte jedoch auch eine Fehlerunterdrückung über den Error Control Operator (@) vermieden werden.
Ich bin neu bei Stack Overflow, aber ich hoffe, dass es nicht üblich ist, dass eine falsche Antwort auf einer Seite am höchsten bewertet wird, während die richtige Antwort keine Votes erhält. : (
Es gibt gültige Fälle, in denen die Überprüfung umständlich und unnötig wird.
Deshalb habe ich diese kleine magische Funktion geschrieben:
Es erfordert keine Änderungen an myHappyFunction ().
Du musst das ändern
bis
%Vor%Ihre Absicht explizit angeben. Das macht es gute Praxis in meinem Buch.
%Vor%@Brian: Ich benutze eine Trinary-Operation, um die Überprüfung für mich durchzuführen:
gibt entweder $ value oder $ default zurück. Abhängig vom Wert von $ value. Wenn es 0, false, leer oder ähnliches ist, wird der Wert in $ default zurückgegeben.
Ich bin mehr für die Herausforderung emuliert Funktionen wie empty () und isset ()
Sean, könnten Sie tun:
%Vor%BEARBEITEN:
Ich bin mir sicher, dass es großartig sein könnte Diskussion über ternäre Betreiber vrs Funktionsaufrufe. Aber der Sinn davon Frage war zu sehen, ob wir ein erstellen können Funktion, die keinen Fehler verursacht, wenn Ein nicht vorhandener Wert wird übergeben ohne das '@'
zu benutzen
Und ich habe es dir gesagt, überprüfe es mit isset()
. Der erste Teil einer ternären Bedingung überprüft nicht null oder nicht null, überprüft true
oder false
. Wenn Sie true
oder false
auf einen Nullwert in PHP überprüfen, erhalten Sie diese Warnungen. isset()
überprüft, ob eine Variable oder ein Ausdruck einen Nullwert zurückgibt oder nicht, und gibt einen booleschen Wert zurück, der ohne Fehler vom ersten Teil des Ternärs ausgewertet werden kann.
Ich bin mir sicher, dass es eine gute Diskussion über Ternary Operators Vrs Function Calls geben könnte. Aber der Zweck dieser Frage war zu sehen, ob wir eine Funktion erstellen können, die keinen Fehler auslöst, wenn ein nicht existierender Wert ohne Verwendung des '@' / p> übergeben wird
Während die Antwort auf die ursprüngliche Frage "nein" ist, gibt es eine Option, die niemand erwähnt hat.
Wenn Sie das @ -Zeichen verwenden, überschreibt PHP nur den error_reporting
-Pegel und setzt ihn vorübergehend auf Null. Sie können " ini_restore('error_reporting');
" verwenden, um es auf das zurückzusetzen, was es vor der Verwendung von @ war.
Dies war nützlich für mich in der Situation, in der ich eine praktische Funktion schreiben wollte, um zu überprüfen, ob eine Variable gesetzt war, und auch andere Eigenschaften hatte, ansonsten einen Standardwert zurückgeben. Aber das Senden einer nicht gesetzten Variable durch verursachte einen PHP-Hinweis, also habe ich das @ verwendet, um das zu unterdrücken, aber dann error_reporting
auf den ursprünglichen Wert innerhalb der Funktion zurückzusetzen.
Etwas wie:
%Vor% Wenn also im obigen Fall $bar
nicht gesetzt ist, erhalte ich keinen Fehler, wenn ich foo()
mit einer nicht existierenden Variable anrufe. Ich erhalte jedoch einen Fehler in der Funktion, in der ich fälschlicherweise is_set
anstelle von isset
eingegeben habe.
Dies könnte eine sinnvolle Option sein, um zu beschreiben, was die ursprüngliche Frage im Geiste gefragt hat, wenn nicht tatsächlich.
Mit einer einzigen Zeile können Sie es erstellen: myHappyFunction($someBogusVar="");
Ich hoffe, dass Sie das suchen. Wenn Sie die PHP-Dokumentation lesen, sehen Sie unter Standardargumentwerte , dass Sie einem Standard einen Standardwert zuweisen Das Argument der Funktion hilft Ihnen, eine Fehlermeldung zu vermeiden, wenn Sie Funktionen verwenden.
In diesem Beispiel sehen Sie den Unterschied zwischen der Verwendung eines Standardarguments und seinen Vorteilen:
PHP-Code:
%Vor% Ausgabe für test1()
-Zeilen:
Warnung : Argument 1 für test1 () fehlt.
Hallo.
.
Hallo Welt.
Ausgabe für test2()
-Zeilen:
.
Hallo.
Hallo Welt.
Dies kann auch in Kombination mit isset()
und anderen Funktionen verwendet werden, um das zu erreichen, was Sie wollen.
Und weiter oben im Abstraktionsbaum, wofür verwenden Sie das?
Sie können diese Werte in jeder Klasse entweder entsprechend initialisieren oder eine bestimmte Klasse erstellen, die alle Standardwerte und Attribute enthält, wie:
%Vor%Die Idee ist, dass, wenn Sie die defaultValue-Funktion in Ihrem Code überall auf und ab verwenden, es ein Wartungs-Albtraum wird, wenn Sie einen Wert ändern müssen, indem Sie nach allen Orten suchen, an denen Sie einen DefaultValue-Aufruf gesetzt haben. Und es wird dich wahrscheinlich auch dazu bringen, dich zu wiederholen und DRY zu verletzen.
Während dies ein einzelner Ort ist, um alle diese Standardwerte zu speichern. Sie könnten versucht sein, diese Setter und Getter nicht zu erzeugen, aber sie helfen auch bei der Wartung, falls es notwendig wird, Änderungen an den Ausgaben vorzunehmen oder Eingaben zu validieren.
Tags und Links php error-handling error-suppression