Robert R.: Vorbelegung von Funktionsargumenten

Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,

ja!

  
function wrong_character($string, $charset = (P_RANDOMCHARSET . P_SPECIALCHARSET))  
  

Das geht leider nicht.
Wie kann ich ein Funktionsargument vorbelegen, wenn der Wert aus mehreren Konstanten bestehen soll?

Man kann das sicherlich zweistufig machen, aber dann wird es unübersichtlich.

Wenn man in der Deklaration nur "$charset = false" schreibt und das dann erst wieder im Funktionskörper austauscht gegen die Konstanten, dann übersieht man schnell, was passieren soll.

Spirituelle Grüße
Euer Robert

--
Möge der Forumsgeist wiederbelebt werden!
  1. Liebe Mitdenker,

    Wie kann ich ein Funktionsargument vorbelegen, wenn der Wert aus mehreren Konstanten bestehen soll?

    Das Argument als Array, in der Funktion ein Default-Array und array_merge für den weiteren Verlauf.

    Vorbelegungen sind heimtückisch, noch dazu, wenn die Vorbelegung mit Konstanten erfolgt, das sollte mit einer entsprechenden Fehlerbehandlung einhergehen, sonst suchst Du Dir den Wolf, wenn Deine Funktion nicht das erwartete Ergebnis liefert.

    MfG

    1. Liebe Mitdenker,
      liebe Wissende,
      liebe Neugierige,

      ja!

      Liebe Mitdenker,

      Wie kann ich ein Funktionsargument vorbelegen, wenn der Wert aus mehreren Konstanten bestehen soll?

      Das Argument als Array, in der Funktion ein Default-Array und array_merge für den weiteren Verlauf.

      Vorbelegungen sind heimtückisch, noch dazu, wenn die Vorbelegung mit Konstanten erfolgt, das sollte mit einer entsprechenden Fehlerbehandlung einhergehen, sonst suchst Du Dir den Wolf, wenn Deine Funktion nicht das erwartete Ergebnis liefert.

      Stimmt auch wieder.
      Also doch lieber im Funktionskörper verwursten und vorher mit defined() fragen, ob die Konstanten überhaupt deklariert und definiert wurden.

      Spirituelle Grüße
      Euer Robert

      --
      Möge der Forumsgeist wiederbelebt werden!
      1. Liebe Mitdenker,

        Also doch lieber im Funktionskörper verwursten und vorher mit defined() fragen, ob die Konstanten überhaupt deklariert und definiert wurden.

        Genau in diese Richtung habe ich vorhin gedacht ;)

        Btw., ich bin kein Freund von Konstanten. Vielmehr belege ich oft eine Variable mit undef vor, was die Prüfung, ob was Definiertes übergeben wurde dann eindeutig macht. Der Vollständigkeit halber ein Beispiel:

          
            private function dbh($cfg){  
                $default = array(  
                    'user' => AMADEUS,  
                    'pass' => KONSTANZE,  
                    'host' => 'localhost',  
                    'port' => 3306,  
                    'base' => WIEN,  
                );  
                $cred = array_merge($default, $cfg);  
                $this->DBH = new PDO(sprintf("mysql:dbname=%s;host=%s", $cred['base'], $cred['host']),  
                    $cred['user'], $cred['pass'],  
                    array(  
                        PDO::ATTR_TIMEOUT => 2,  
                        PDO::ATTR_PERSISTENT => TRUE,  
                        //PDO::MYSQL_ATTR_INIT_COMMAND =>  "SET NAMES 'UTF8'",  
                    ));  
                $this->DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
            }  
        
        

        Und hier gleich das mögliche Problem: Nach dem Deploy funktioniert die DB-Verbindung nicht. ERRMODE_EXCEPTION greift nicht, weil das DBHandle gar nicht erst erstellt werden konnte.

        Es wäre zu prüfen, ob die Credentials überhaupt in der Funktion angekommen sind, egal ob als Konstantze oder als Argument. Hier erschwert die Vorbelegung eine Fehlersuche.

        MfG

  2. Hallo

    function wrong_character($string, $charset = (P_RANDOMCHARSET . P_SPECIALCHARSET))

    
    >   
    > Das geht leider nicht.  
    > Wie kann ich ein Funktionsargument vorbelegen, wenn der Wert aus mehreren Konstanten bestehen soll?  
      
    Die Werte der konstanten werden offensichtlich wie Zeichenketten verknüpft. Dann wundern mich aber die die beiden Konstanten einschließenden Klammern.  
      
    `function wrong_character($string, $charset = P_RANDOMCHARSET . P_SPECIALCHARSET)`{:.language-php}  
    ungetestet  
      
    Werden die Werte beider Konstanten einzeln gebraucht, sollten sie auch einzeln zur Verfügung stehen. Entweder, wie hotti schon schrieb, als Array, oder als einzelne Parameter.  
      
    ~~~php
    function wrong_character($string, $charset = array(P_RANDOMCHARSET, P_SPECIALCHARSET))  
    # oder  
    function wrong_character($string, $charsetRandom = P_RANDOMCHARSET, $charsetSpecial = P_SPECIALCHARSET)
    

    ungetestet

    Tschö, Auge

    --
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
    Terry Pratchett, "Wachen! Wachen!"
    ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
    Veranstaltungsdatenbank Vdb 0.3
    1. Liebe Mitdenker,
      liebe Wissende,
      liebe Neugierige,

      ja!

      Hallo

      function wrong_character($string, $charset = (P_RANDOMCHARSET . P_SPECIALCHARSET))

      
      > >   
      > > Das geht leider nicht.  
      > > Wie kann ich ein Funktionsargument vorbelegen, wenn der Wert aus mehreren Konstanten bestehen soll?  
      >   
      > Die Werte der konstanten werden offensichtlich wie Zeichenketten verknüpft. Dann wundern mich aber die die beiden Konstanten einschließenden Klammern.  
      >   
      > `function wrong_character($string, $charset = P_RANDOMCHARSET . P_SPECIALCHARSET)`{:.language-php}  
      > ungetestet  
        
      So hatte ich es zuerst. Das wird angemeckert. Scheint eben in der Funktionsdeklaration/-Signatur nicht erlaubt zu sein.  
        
        
        
        
        
      Spirituelle Grüße  
      Euer Robert
      
      -- 
      Möge der Forumsgeist wiederbelebt werden!
      
      1. Hallo

        function wrong_character($string, $charset = (P_RANDOMCHARSET . P_SPECIALCHARSET))

        
        > > >   
        > > > Das geht leider nicht.  
        > >   
        > > Die Werte der konstanten werden offensichtlich wie Zeichenketten verknüpft. Dann wundern mich aber die die beiden Konstanten einschließenden Klammern.  
        > >   
        > > ~~~php
          
        
        > > function wrong_character($string, $charset = P_RANDOMCHARSET . P_SPECIALCHARSET)
        
        

        ungetestet

        So hatte ich es zuerst. Das wird angemeckert. Scheint eben in der Funktionsdeklaration/-Signatur nicht erlaubt zu sein.

        Was steht denn überhaupt in den Konstanten drinnen und was soll bei P_RANDOMCHARSET . P_SPECIALCHARSET herauskommen?

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
        Veranstaltungsdatenbank Vdb 0.3
      2. Tach!

        function wrong_character($string, $charset = (P_RANDOMCHARSET . P_SPECIALCHARSET)
        Das geht leider nicht.
        Wie kann ich ein Funktionsargument vorbelegen, wenn der Wert aus mehreren Konstanten bestehen soll?

        Du könntest eine weitere Konstante anlegen, die den gewünschten verknüpften Wert enthält.

        function wrong_character($string, $charset = P_RANDOMCHARSET . P_SPECIALCHARSET)
        ungetestet
        So hatte ich es zuerst. Das wird angemeckert. Scheint eben in der Funktionsdeklaration/-Signatur nicht erlaubt zu sein.

        Alternativ ginge noch null als Default-Wert, auf den dann in der Funktion prüfen und den Wert so setzen wie gewünscht.

        dedlfix.