2012-04-04 5 views
1

Gibt es eine Möglichkeit Standardfunktionsargumente mit Variablen in ihnen so einzurichten wiePHP-Funktion Argumente mit einer variablen

function example($test = 'abc', $image = $scripturl . 'abc.png') 
{ 
     // ... 
} 

Der Grund möchte ich, dies zu tun, weil ich Quellen, die ich globale Variable Einstellungen haben mit dem Pfad eingerichtet, so dass es leicht zu greifen ist, wenn ich eine CSS-Datei oder ein Bild aufnehmen muss.

Der obige Code gibt eine unerwartete T_VARIABLE ...

Antwort

3

Das ist nicht möglich; Standardargumente müssen konstant sein.

Sie können es leicht wie diese, obwohl emulieren:

function example($test = 'abc', $image = null) { 
    if($image === null) { 
     global $scripturl; 
     $image = $scripturl . 'abc.png'; 
    } 
} 
+0

einige OOP kann nützlich sein. Wenn $ $ scripturl eine Objektvariable ist, die beim Konstruieren gesetzt wird, könnte es $ this-> scripturl sein. –

+0

Ye, ich denke, das wäre die einzige Lösung und es in der Funktion zu verwenden:/- Danke für die Antwort! – MLM

+0

Vergessen Sie 'global $ scripturl;' nicht für externe Variablen, die keine Superglobals sind – craniumonempty

4

Standardwerte sollte eine Konstante sein. Sie sollten den Wert haben, der bereits in der Kompilierzeit, nicht in einer Laufzeit verfügbar ist.

+0

Was ich da diese Einstellungen konstant bei kompilieren würde ich vorschlagen würde sich nur ändern, wenn die Quellen verschoben würden. Ich verstehe, aber gibt es irgendeinen Weg, etwas so zu machen, wie ich es vorschlage? Ich kann immer die Variable in der Funktion hinzufügen, aber ... Ich denke, ich werde mit @ ThiefMaster Lösung gehen – MLM

1

gut, wie der Fehler bereits erwähnt, können Sie nicht eine Variable als (Teil) Standardwert in der Funktion Signatur verwenden.

, was Sie können aber tun, ist etwas bekannt unzulässigen Wert (null zum Beispiel) passieren und dann innerhalb der Funktion prüfen und zuordnen, wenn nötig:

function example($test = 'abc', $image = null) 
{ 
    global $scripturl; 
    if($image === null) $image = $scripturl . 'abc.png'; 
    ... 
}