Wie übergebe ich undefinierte vars an Funktionen ohne E_NOTICE Fehler?

8

Ziemlich einfache Frage wirklich, wie übergebe ich undefined vars zu Funktionen ohne E_NOTICE Fehler?

Wenn Sie undefinierte Variablen an Funktionen wie isset () übergeben, wird kein Fehler ausgelöst, senden Sie ihn jedoch an Ihre eigene Funktion, und Sie erhalten einen Hinweis: Undefinierter Offset: usw.

Ich habe mir ein paar Gründe dafür ausgedacht, dies heute zu wollen, aber meine aktuelle Funktion ist fast ein Klon von isset, außer dass es überprüft, ob any der Argumente gesetzt ist, anstatt alles wie isset ( a, b, c).

%Vor%

Nun habe ich zum Beispiel ein riesiges 2d-Array von [x] [y], in das Werte zufällig eingefügt werden. Ich muss überprüfen, ob die randomisierten Co-ords etwas "nächstes" (x-1, y-1 bis x + 1, y + 1) usw. enthalten.

Ich möchte keine Schleife von 20.000.000 machen und jede Variable initialisieren. Ich möchte nur 9 vars senden und überprüfen, ob bereits eingestellt sind.

%Vor%

Wie so.

Ich könnte einfach tunset (x) || isset (x) || isset (x), aber das sieht nicht sehr gut aus.

Gibt es eine Möglichkeit, nicht definierte Variablen an meine Funktion zu übergeben, ohne Fehler zu verursachen?

Nicht daran interessiert, die einfache Option zu nehmen;)

Danke fürs Lesen!

\ o

Update: 12. April 2012, 21:03 Sieht so aus, als gäbe es keine spezielle Funktion, die dies ermöglicht. Entweder passiere wie anyset (@ $ array [0], @ $ array [1]) usw., oder wickle einfach alles in tausend Issets ein:

%Vor%

Hoffe das hilft jemand anderem in der Zukunft!

    
Adam K Dean 12.04.2012, 19:50
quelle

4 Antworten

7

Sie haben drei Möglichkeiten:

  • Verwenden Sie isset, um die Logik richtig zu behandeln (isset ($ x) || isset ($ y) || isset ($ z))
  • Wrap alles in isset () und lassen Sie dann Ihre Funktion prüfen, ob eines der Argumente wahr (Art von bleh)
  • ist
  • Verwenden Sie @, um Fehler zu unterdrücken (auch blah)

Ein Beispiel für @ wäre:

%Vor%

Sie sollten sich daran erinnern, dass diese Hinweise aus einem bestimmten Grund existieren. Ich vermeide Fehlerbehebungen. Es scheint Hacky für mich. Ich würde einfach alles in isetset () richtig einpacken. Es ist viel ausführlicher, aber auch meiner Meinung nach richtiger.

    
Corbin 12.04.2012, 19:54
quelle
6

Nach Referenz wird für definierte Argumente funktionieren.

%Vor%     
Nate 12.04.2012 19:58
quelle
1

isset ist etwas Besonderes, da es sich um ein PHP-Sprachkonstrukt und nicht um eine Funktion [1] .

Wenn eine Variable nicht definiert ist, können Sie sie nicht wirklich übergeben, weil sie nicht definiert ist (daher die Warnung).

Wie in den Kommentaren angegeben, können Sie die Warnungen unterdrücken, indem Sie der Variable eine @ voranstellen, die verhindert, dass eine Warnung ausgegeben wird, wenn sie nicht gesetzt ist. Dann können Sie innerhalb der Funktion überprüfen, ob der Wert Null ist, oder versuchen% isset zu verwenden, um zu sehen, ob es registriert ist.

    
drew010 12.04.2012 19:56
quelle
-1

Vielleicht wird so etwas für Sie funktionieren? Es ist ein bisschen hackish, aber ich denke, was Sie wollen, ist nicht ohne faule Auswertung der Funktionsargumente ziemlich möglich.

%Vor%

Bearbeiten: oops, logische Probleme.

    
Tim 12.04.2012 19:58
quelle

Tags und Links