Funktion optional Referenz
Steffen
- php
Hallo,
also ich habe eine Funktion, ca. so:
function test($wert,&$return);
Dabei enthält $return später den Wert true bzw. false, falls ein Fehler auftrat.
Die Funktion kann auch ein false zurück geben, auch wenn kein Fehler auftrat, darum die extra Unterscheidung.
Jetzt möchte ich aber, das $return eine optional Variable ist.
In PHP5.x habe ich es so gelöst:
function test($wert,&$return = 0);
Allerdings erhalte ich in PHP4 folgenden Fehler:
Parse error: parse error, expecting `')'' in datei.php on line 2
Dabei ist line 1 die 'function ...'.
Ohne = 0 funktioniert der Script einwandfrei.
Wie muss ich dies jetzt anpassen, damit es auch in PHP4 funktioniert?
Grüße
Steffen.
Hello,
function test($wert,&$return);
Ob da nicht die Eigenschaft von PHP, "Arrays" zurückgeben zu können, interessanter ist?
Referenzen sollte wirklich nur auf vorhandene Objekte erstellt werden, sonst steugt man irgendwann nicht mehr durch.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hallo,
function test($wert,&$return);
Ob da nicht die Eigenschaft von PHP, "Arrays" zurückgeben zu können, interessanter ist?
Referenzen sollte wirklich nur auf vorhandene Objekte erstellt werden, sonst steugt man irgendwann nicht mehr durch.
Also das ist auch nicht so leicht möglich.
Und zwar wird für $wert eine kodierte, serialized Variable übergeben. Diese wird zuerst speziell dekodiert (und auf integrität geprüft) und dann die Variable unserialized zurück gegeben.
Wenn die serialized Variable jetzt bool(false) war, ist die Rückgabe false, obwohl die spezielle Dekodierung evt. erfolgreich war.
Darum enthält $return _nur_, ob die Variable dekodiert und gültig ist.
Der User soll die Funktion wie folgt anwenden können:
[code lang=php]
<?php
$var = "Egal welcher Variablen Typ, egal ob int, string, array, object";
$wert = kodieren($var); //serialize + kodierung
$ende = dekodieren($wert,$return); //dekodierung + unserialize
// --> $var === $ende <--
// $return: Konnte $wert dekodiert werden?
?>[/php]
Grüße
Steffen
echo $begrüßung;
Und zwar wird für $wert eine kodierte, serialized Variable übergeben. Diese wird zuerst speziell dekodiert (und auf integrität geprüft) und dann die Variable unserialized zurück gegeben.
Wie wär es damit: Übergib $wert als Referenz und gib das Ergebnis darüber wieder zurück. Das Funktionsergebnis gibt an, ob die Operation erfolgreich war oder nicht. Bei Nichterfolg kannst du ja $wert auf null setzen.
echo "$verabschiedung $name";
echo $begrüßung;
function test($wert,&$return = 0);
Wie muss ich dies jetzt anpassen, damit es auch in PHP4 funktioniert?
So:
function test($wert,&$return);
Per Referenz übergebene Variablen können in PHP 4 nicht optional sein.
echo "$verabschiedung $name";
你好 dedlfix,
Per Referenz übergebene Variablen können in PHP 4 nicht optional sein.
Per Referenz übergebene Variablen können schon optional sein, aber nicht
vorbelegt (was ja auch in der Natur der Sache liegt – wie will man eine
nicht existierende Referenz mit etwas befüllen? ;-):
function test($var1,&$var2) {
echo "var1: $var1<br>";
echo "var2: $var2<br>";
if(isset($var2)) echo "var2 is set<br>";
}
$ref = 1;
@test("blahr");
test("blahr",$ref);
再见,
克里斯蒂安
echo $begrüßung;
Per Referenz übergebene Variablen können in PHP 4 nicht optional sein.
Per Referenz übergebene Variablen können schon optional sein, aber nicht
vorbelegt
Einigen wir uns auf: Per Referenz übergebene Variablen können unter PHP4 nicht mit einem Default-Wert belegt werden. Denn
function test($var1,&$var2) {
[...]
@test("blahr");
die hier unterdrückte Warnung hat mit der Referenz nicht viel zu tun. Die kommt auch wenn "normale" Pflicht-Parameter weggelassen werden.
Ich sehe das eher als eine nicht sachgerechte Verwendung einer Funktion oder als einen Konzeptionsfehler beim Erstellen der Funktion an.
echo "$verabschiedung $name";
Hallo,
also ich habe eine Funktion, ca. so:
function test($wert,&$return);Dabei enthält $return später den Wert true bzw. false, falls ein Fehler auftrat.
Die Funktion kann auch ein false zurück geben, auch wenn kein Fehler auftrat, darum die extra Unterscheidung.Jetzt möchte ich aber, das $return eine optional Variable ist.
In PHP5.x habe ich es so gelöst:
function test($wert,&$return = 0);Allerdings erhalte ich in PHP4 folgenden Fehler:
Parse error: parse error, expecting `')'' in datei.php on line 2Dabei ist line 1 die 'function ...'.
Ohne = 0 funktioniert der Script einwandfrei.Wie muss ich dies jetzt anpassen, damit es auch in PHP4 funktioniert?
funktionen sind "blackboxen", welche eine eingabe bekommen und eine ausgabe liefern: ausgabe = funktion(eingabe)
daher sollten ausgaben nicht als argumente übergeben werden, sondern im return-statement.
das & bewirkt eine refenz, also pointer, welcher auf die originale speicheradresse zeigt. wenn der interpreter deine funktion übersetzt, soll er &$return auf 0 setzen. hier bekommt der interpreter ein problem, da die adresse von $return zu diesem zeitpunkt nicht bekannt ist.
echo $begrüßung;
funktionen sind "blackboxen", welche eine eingabe bekommen und eine ausgabe liefern: ausgabe = funktion(eingabe)
daher sollten ausgaben nicht als argumente übergeben werden, sondern im return-statement.
Soweit zur Theorie. Doch selbst einige PHP-eigene Funktionen halten sich nicht konsequent an diese.
Beispiel: asort()
Richtigerweise wäre wohl eine Exception auszulösen, wenn die Funktion einen Fehler während der Verarbeitung feststellt. Diese Möglichkeit wird gern noch übersehen, so auch bisher in diesem Thread (mich eingeschlossen), weil sie erst seit PHP5 zur Verfügung steht.
In PHP5.x habe ich es so gelöst:
function test($wert,&$return = 0);
das & bewirkt eine refenz, also pointer, welcher auf die originale speicheradresse zeigt. wenn der interpreter deine funktion übersetzt, soll er &$return auf 0 setzen. hier bekommt der interpreter ein problem, da die adresse von $return zu diesem zeitpunkt nicht bekannt ist.
Theoretisch wäre es so. Doch PHP5 hat offensichtlich kein Problem damit. Dann wird die Variable eben für die Laufzeit der Funktion wie ein ganz normaler (optionaler) Parameter mit dem angegebenen Default-Wert angelegt und am Ende der belegte Speicherplatz freigegeben. Der Aufrufer war ja sowieso nicht an einer Rückgabe interessiert.
echo "$verabschiedung $name";
die fehler anderer sollten kein vorbild für sich selbst sein.
der eigene anspruch sollte darin bestehen, etwas so sinnvoll zu machen wie es dem "gelben vom ei" am nächsten kommt.
richtig wäre tatsächlich, hier eine execption zu erzeugen, wenn der 2. parm null ist, denn execptions sind ausnahmen, welche im normalen ablauf nicht vorgesehen sind. wenn php5 hier tolerant ist, halte ich dies für falsch, denn hiermit wird die schlechte vorgehensweise unterstützt.
daher nochmal: ausgabe = funktion(eingabe)