Vorbelegung von Funktionsargumenten
Robert R.
- php
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
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
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
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
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
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!
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
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.