Enrico: Fehlermeldung "Fatal error: Cannot redeclare"

Hallo,

ich habe in der php-Datei "Standard.php" mehrere Funktionen definiert.

Hier (auszugsweise) der Inhalt der Datei:

  
<?php  
  
   function bin2hex($t)  
   {  
      $r="";  
  
      for($i=0,$j=strlen($t);$i<$j;$i++)  
         $r.=sprintf("%02x",ord($t{$i}));  
  
      return $r;  
   }  
  
   function hex2bin($t)  
   {  
      $r="";  
  
      for($i=0,$j=strlen($t);$i<$j;$i+=2)  
         $r.=chr(hexdec($t{$i}.$t{($i+1)}));  
  
      return $r;  
   }  
  
   ...  
  
?>  

Unverständlicherweise bekomme ich folgende Fehlermeldung angezeigt:

Fatal error: Cannot redeclare bin2hex() in Standard.php on line 9

Zeile 9 bezieht sich hierbei auf die schliessende geschweifte Klammer der Funktion bin2hex.

Die Funktion existiert nur ein einziges Mal und auch nur in dieser Datei.

Die einzige Möglichkeit, diese Fehlermeldung zu unterbinden, ist, die Funktion in folgende Abfrage einzuschliessen:

  
   if(!function_exists("..."))  
   {  
      function bin2hex($t)  
      {  
         $r="";  
  
         for($i=0,$j=strlen($t);$i<$j;$i++)  
            $r.=sprintf("%02x",ord($t{$i}));  
  
         return $r;  
      }  
   }  

Warum ist das so?

Bei allen nachfolgenden Funktionen habe ich diesen Fehler (?) nicht.

Die Abfrage macht zudem absolut keinen Sinn, da die Funktion vorher und nachher kein weiteres Mal vorkommt.

Danke für eure Hilfe.

Gruß
Enrico

  1. Hi,

    Fatal error: Cannot redeclare bin2hex() in Standard.php on line 9

    D’oh!

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi ChrisB,

      D’oh!

      Der von Dir genannten Seite habe ich meine Funktion entnommen:
      http://www.php.net/manual/en/function.bin2hex.php#90408

      Gruß
      Enrico

      1. Tach!

        Der von Dir genannten Seite habe ich meine Funktion entnommen:
        http://www.php.net/manual/en/function.bin2hex.php#90408

        Das macht die in PHP enthaltene Funktion gleichen Namens nicht ungeschehen oder überschreibbar.

        dedlfix.

        1. *boing*

          Dankesehr, das lag mehr als nur auf der Hand... ^^

          Gruß
          Enrico

          1. Dankesehr, das lag mehr als nur auf der Hand... ^^

            Tip:

            In PHP enthaltene Funktionen haben prinzipiell nur kleine Buchstaben im Name. Wenn Du eigene Funktionen deklarierts gib diesen große Buchstaben im Name mit auf den Weg.

            bin2hex -> Bin2Hex

            und/oder verwende einen (geeigneten) Präset im Name

            bin2hex -> FTX_bin2hex (Aber he! "FTX_" ist "mein" Präset!)

            Jörg Reinholz

            1. Tach!

              In PHP enthaltene Funktionen haben prinzipiell nur kleine Buchstaben im Name. Wenn Du eigene Funktionen deklarierts gib diesen große Buchstaben im Name mit auf den Weg.

              Die Funktionsnamen (ebenso wie Klassenname, aber anders als Variablennamen) sind in PHP groß-/kleinschreibungsunabhängig. Funktionen können auf diese Weise nicht überschrieben werden. Seit PHP 5.3 gibt es allerdings Namensräume.

              dedlfix.

          2. Tip Nr 2:

            Von PHP (und Erweiterungen) enthaltene Konstanten haben prinzipiell nur große Buchstaben im Name. Wenn Du eigene Konstanten deklarierts gib diesen auch kleine Buchstaben im Name mit auf den Weg.

            Beispiel:

            E_ALL -> E_All (Warnung: Das konkrete Beispiel ist optisch kaum zu unterscheiden und wird häufig zu Fehlern führen!)

            und/oder verwende einen (geeigneten) Präset im Name

            E_ALL -> FTX_E_All (Aber he! "FTX_" bleibt "mein" Präset!)

            Jörg Reinholz

      2. [latex]Mae  govannen![/latex]

        D’oh!

        Der von Dir genannten Seite habe ich meine Funktion entnommen:
        http://www.php.net/manual/en/function.bin2hex.php#90408

        http://www.php.net/manual/en/functions.user-defined.php 2. Absatz hinter Example 3

        Stur lächeln und winken, Männer!
        Kai

        --
        var jQuery = $(hit);
        I am Pentium of Borg. Division is futile. You will be approximated.
        SelfHTML-Forum-Stylesheet