Rike-Benjamin Schuppner: undefinierte Variablen auf Standard-Werte

Hallo,

gibt es eine Funktion (oder doch eher ein Konstrukt) in PHP mit dem ich potentiell uninitialisierte Variablen umschließen kann, so dass diesen ein Standardwert zugewiesen wird?

Ansonsten muss ich ja schon bevor ich die Variablen in eine Funktion übergebe das ganze mit isset($var) überprüfen um die "Notice: Undefined variable"-Meldung zu umgehen.

Vom Programmierprinzip sollte es ja auch kein Problem darstellen, meine Funktion, die ich - sehr oft - aufrufe könnte dies ja schließlich auch überprüfen.

Oder wäre es sinnig die Variable mit &$var zu übergeben? Klappt aber leider auch nicht in jedem Fall, da ich teilweise noch einen String an die Variable anhänge. Dann meckert er richtig!

Gruß

rbs

  1. Hallo,
    so gehts vielleicht

    ....
    if($vari=="")
    {
    $vari = "abc";
    }
    ....

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    1. Hallo,

      if($vari=="")
      {
      $vari = "abc";
      }

      Ist soweit klar (natürlich muss der Vergleich mit isset() gemacht werden), aber eben das will ich kürzer haben.

      Gruß

      rbs

  2. hi,

    gibt es eine Funktion (oder doch eher ein Konstrukt) in PHP mit dem ich potentiell uninitialisierte Variablen umschließen kann, so dass diesen ein Standardwert zugewiesen wird?
    Ansonsten muss ich ja schon bevor ich die Variablen in eine Funktion übergebe das ganze mit isset($var) überprüfen um die "Notice: Undefined variable"-Meldung zu umgehen.

    ich weiss nicht, ob ich dein anliegen richtig verstehe ...

    du kannst funktionen so definieren, dass für ihre parameter standard-werte genommen werden, wenn nicht explizit ein wert beim aufruf der funktion mitgegeben wird.
    http://www.php.net/manual/de/functions.arguments.php

    gruss,
    wahsaga

    1. Hallo wahsaga,

      du kannst funktionen so definieren, dass für ihre parameter standard-werte genommen werden, wenn nicht explizit ein wert beim aufruf der funktion mitgegeben wird.

      Dann kommt aber leider trotzdem die "Notice: Undefined variable"-Meldung, die ich zwar nützlich finde, ich aber keine Lust habe für so und so viele Variablen einen isset()-Check durchzuführen, bevor ich sie an eine Funktion übergebe.

      Den isset()-Check würde ich ja gar nicht auslassen wollen, ich möchte ihn nur in der Funktion, die ich mit der Variablen aufrufe,  durchführen.

      Dafür suche ich eine Lösung...

      Gruß

      Rike

  3. hi, ein kurzes codebeispiel würde helfen das ganze besser zu
    verstehen. Wieviele Variablen willst du den übergeben, welche
    Variablen und wie sieht die Funktion aus.

    Zur Not köntest du auch das error-reporting mit @ unterdrücken.
    Fals das ganze über $_REQUEST kommt kannst du ja gleich das ganze übergeben.

    schöne grüße
    FICHTL

    1. Hallo,

      hi, ein kurzes codebeispiel würde helfen das ganze besser zu
      verstehen. Wieviele Variablen willst du den übergeben, welche
      Variablen und wie sieht die Funktion aus.

      Also erstmal habe ich eine Funktion metatag(), welche mir mit zwei Parametern einen Metatag generiert:

      function metatag($name, $content) {
          if ((!empty($name))&&(!empty($content)))
              print '<meta name="'.$name.'" content="'.$content.'" />'; }

      So weit, so gut.

      Die Variablen übergebe ich in den meisten Fällen so:

      metatag('author', $meta['autor']); ...

      , wobei ich einige (nicht alle) Elemente von $meta einbinde.

      Nun ist es aber so, dass das Script für jede Seite meiner HP ausgeführt werden soll; nur sind nicht auf jeder Seite explizit alle Elemente von $meta vergeben.

      Das PHP mich nun also darauf hinweist, dass die Variable undefiniert ist, mag ja schön und gut sein und ich habe ja auch in metatag() eine Überprüfung dafür eingebaut.

      Aber muss ich nun wirklich zu jedem Element eine extra Zeile einbauen:

      if (isset($meta['blah']))
          metatag('blah', $meta['blah']);

      Da kommen nämlich schon einige zusammen.

      Fals das ganze über $_REQUEST kommt kannst du ja gleich das ganze übergeben.

      Dann habe ich aber in der Funktion das gleiche Spiel, da ich ja eben nicht alle Elemente des Arrays nutzen möchte. Und an manche Elemente auch noch einen Standardstring hängen will.

      Gruß

      rbs

      1. Nun ist es aber so, dass das Script für jede Seite meiner HP ausgeführt werden soll; nur sind nicht auf jeder Seite explizit alle Elemente von $meta vergeben.

        hallo, so weit ich das jetzt verstanden habe hast du auf
        jeder seite einige dieser Anweisungen:

        metatag('author', $meta['autor']);
        metatag('keywords', $meta['keywords']);
        ...

        die dann nach der Reihe die jeweiligen Metatags ausführen.

        Fals du jetzt auf jeder Seite nur bestimmte Metas verweden willst,
        kannst du das ja mittels Schleife machen. Zuerst festlegen welche
        dann testen dann ausgeben.

        $usedMetas = array('author','keywords');
        foreach ($usedMetas as $usedMeta) {
           if (isset($meta[$usedMeta])) {
              metatag($usedMeta, $meta[$usedMeta])
           }
        }

        Ich hoffe ich hab das so richtig verstanden und das hilft dir jetzt
        weiter. Wenn nicht einfach noch besser erklären.

        Schöne Grüße
        FICHTL

        1. hallo, so weit ich das jetzt verstanden habe hast du auf
          jeder seite einige dieser Anweisungen:

          metatag('author', $meta['autor']);
          metatag('keywords', $meta['keywords']);
          ...

          die dann nach der Reihe die jeweiligen Metatags ausführen.

          Nicht ganz! Auf jeder Seite definiere ich das $meta mit einer Liste an Zuweisungen:

          $meta['autor'] = 'ich'; $meta['keywords'] = 'internetseite';

          Dann wird ein globales Script aufgerufen, welches die metatag()-Funktion benutzt.

          metatag('author', $meta['autor']);
          metatag('keywords', $meta['keywords']);
          metatag('DC.Creator', $meta['autor']);

          In diesem Script mache ich es eher selektierend, da ich in $meta auch noch andere Daten speichere und manche Daten auch mehrmals verwende, ohne sie mehrmals speichern zu wollen. Siehe DC.Creator.

          foreach scheidet also demnach aus.

          Wenn ich die Variable als Referenz übergebe
          metatag('author', &$meta['autor']);
          dann meckert er nicht, aber dann kann ich auch keine Standardkeywords übergeben:

          metatag('keywords', &$meta['keywords'].', homepage, wissen, php');
          funktioniert (natürlich) nicht.

          Gruß

          rbs