jan: isset, empty, array_key_exists - Vorteil/Nachteil

Hi,

als PHP-Neuling bin ich mir gerade nicht darüber im klaren, welche Funktion
(isset, empty, key_exists bzw. array_key_exists) ich nun einsetzen sollte, um zu
sehen ob ein Element in einem Array existiert.
Angenommen ich möchte nachschaun, ob ein bestimmter Parameter via
GET übergeben wurde, dann habe ich folgende, mir bekannte Möglichkeiten:

- isset($_GET['p1'])
  - empty($_GET['p1'])
  - array_key_exists('p1', $_GET) //ab PHP4 >= 4.1.0 bzw. key_exists bei PHP 4.0.6

Ungeachtet der PHP Version, worin liegen die Vor-/Nachteile der einzelnen Funktionen?
Ich konnte im Web nichts finden, was die Einführung von array_key_exists erklären würde.
Welche Funktion sollte ich einsetzen bzw. wie macht ihr das?

danke
jan

  1. Moin!

    als PHP-Neuling bin ich mir gerade nicht darüber im klaren, welche Funktion
    (isset, empty, key_exists bzw. array_key_exists) ich nun einsetzen sollte, um zu
    sehen ob ein Element in einem Array existiert.
    Angenommen ich möchte nachschaun, ob ein bestimmter Parameter via
    GET übergeben wurde, dann habe ich folgende, mir bekannte Möglichkeiten:

    - isset($_GET['p1'])
      - empty($_GET['p1'])
      - array_key_exists('p1', $_GET) //ab PHP4 >= 4.1.0 bzw. key_exists bei PHP 4.0.6

    Dann gucken wir doch mal in die Online-Doku:
    http://de3.php.net/manual/de/function.isset.php
    isset -- Prüft die Existenz einer Variablen

    http://de3.php.net/manual/de/function.empty.php
    empty -- Prüft, ob eine Variable einen Wert enthält

    http://de3.php.net/manual/de/function.array-key-exists.php
    array_key_exists -- Prüft, ob ein Schlüssel in einem Array existiert

    Wenn du die standardmäßigen Fehlerausgaben angeschaltet hast, dann kriegst du keine "Notice", wenn du auf eine nichtexistierende Variable zugreifst.

    Wenn du hingegen die Notices sehen willst, schreibe an den Beginn deines Skriptes

    error_reporting(E_ALL);

    Dann wird PHP dir viele Dinge melden, die beim Zugriff auf undefinierte Variablen und falsche Konstantenangaben sonst stillschweigend korrigiert werden. Und dann wirst du möglicherweise den kompletten Unterschied aller drei Funktionen sehen.

    Offensichtlich ist, dass empty() den Variableninhalt prüft. Dazu muß die Variable aber existieren. Existiert sie nicht, wird sie angelegt, mit "nichts" initialisiert und dann geprüft. empty() ergibt wahr.

    isset() und array_key_exists() prüfen, ob etwas vorhanden ist. isset() hatte ich persönlich immer als Prüfung von ganzen Variablen eingeordnet und array_key_exists() eben als Prüfung von Array-Schlüsseln. Ich habe selbst noch nicht probiert, ob da Unterschiede in der Funktion liegen.

    Welche Funktion sollte ich einsetzen bzw. wie macht ihr das?

    So wie es aussieht, hast du drei Funktionen, die drei unterschiedliche Dinge tun (jedenfalls dem Namen nach). Nutze sie entsprechend.

    Insbesondere sind isset() und empty() nicht dasselbe. Eine Variable kann leer existieren - dann wurde z.B. im Formular nichts eingetragen - oder sie kann nicht existieren - dann existierte das Feld nicht im Formular, vielleicht, weil daran manipuliert wurde.

    - Sven Rautenberg

    --
    SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. isset() hatte ich persönlich immer als Prüfung von ganzen Variablen eingeordnet und array_key_exists() eben als Prüfung von Array-Schlüsseln. Ich habe selbst noch nicht probiert, ob da Unterschiede in der Funktion liegen.

      Wenn das Feld nicht existiert, müsste array_key_exists() eigentlich meckern, isset() hingegen nicht, weil ersteres einen Feldinhalt prüft, letzteres hingegen nur allgemein.
      Vielleicht ist array_key_exists() aber auch nur der Versuch, den Interpreter mit zugemülltesten Namensraum im Universum zu bauen ;>

      Gruß,
        soenk.e