Funktion gibt keinen Wert zurueck
Maddin
- php
Guten Abend,
ich habe eine kleine Frage. Im Moment bin ich dabei die Scripts meiner Webseite ordentlich auszumisten(man wundert sich immer wieder, wie man vor 3 Jahren programmiert hat :D).
Aber jetzt hab ich ein kleines Problem, was mich sehr verwundert.
Der alte Code sah (vereinfacht) folgendermassen aus:
function art($art) {
global $sql;
$sql=mysql_query("..."):
}
if(isset($art)) {
art($art);
while ($row = mysql_fetch_row($sql)) {
usw...
}
}
Hat auch alles wunderbar funktioniert
Jetzt moechte ich gerne das global loswerden, und hab alles umgeaendert zu:
function art($art) {
$sql=mysql_query("...")
return $sql:
}
if(isset($art)) {
art($art);
while ($row = mysql_fetch_row($sql)) {
usw...
}
}
Aber jetzt meckert php, dass im zweiten Beispiel $sql nicht gefunden wird, obwohl ich nur das gloabl $sql;
weggelassen haben, aber dagegen ein return hinzugefuegt habe.
Habe ich noch einen Fehler uebersehen, oder kann ich einen Rueckgabewert, der ein mysql_query ist, nicht zurueckgeben?
Schoenen abend noch
<maddin>
So, koennte mir selbst auf den Kopf hauen. Ich sollte das Returnergebnis auch speicher. Ist mir aber nicht so ganz logisch.
if(isset($art)) {
$sql=art($art);
while ($row = mysql_fetch_row($sql)) {
usw...
}
}
[/code]
Falls noch jemand eine gute Erklaerung hat, bitte her damit.
Wieso muss ich wenn eine Funktion ein return hat, die Funktion folgendermassen aufrufen, um das "returnte" ergebnis verarbeiten zu koennen?
$sql=art($art);
while ($row = mysql_fetch_row($sql)) {....
Wieso geht es nicht so?
art($art);
while ($row = mysql_fetch_row($sql)) {...
(Beide male vorausgesetzt, wir haben eine Funktion art die return $sql
am Schluss stehen hat.
ein etwas verwirrter
<maddin>
Hi,
Wieso muss ich wenn eine Funktion ein return hat, die Funktion folgendermassen aufrufen, um das "returnte" ergebnis verarbeiten zu koennen?
$sql=art($art);
while ($row = mysql_fetch_row($sql)) {....
Weil sonst der Rückgabewert im Nirgendwo verpufft.
> Wieso geht es nicht so?
> ~~~php
> art($art);
> while ($row = mysql_fetch_row($sql)) {...
>
Weil es hier keine Variable namens $sql in diesem Geltungsbereich gibt.
Dein $sql innerhalb der Funktion art() ist ein vollkommen anderes, als das außerhalb.
Lies http://www.php.net/manual/en/language.variables.scope.php, da wird der Geltungsbereich von Variablen erklärt.
MfG ChrisB
Hey :)
Weil es hier keine Variable namens $sql in diesem Geltungsbereich gibt.
Dein $sql innerhalb der Funktion art() ist ein vollkommen anderes, als das außerhalb.Lies http://www.php.net/manual/en/language.variables.scope.php, da wird der Geltungsbereich von Variablen erklärt.
Danke, dass hatte ich (anscheinend) schon davor verstanden. Heisst das im endeffekt, dass ich den Funktionsaufruf in eine Variable "speichern" muss, damit das return die Variable "fuellt"?
function function($param){
do_this($param);
return $param;
}
$das_will_ich_verwenden=function($param);
<maddin>
Hi,
Lies http://www.php.net/manual/en/language.variables.scope.php, da wird der Geltungsbereich von Variablen erklärt.
Danke, dass hatte ich (anscheinend) schon davor verstanden.
Nein, das hast du offenbar immer noch nicht verstanden.
Heisst das im endeffekt, dass ich den Funktionsaufruf in eine Variable "speichern" muss, damit das return die Variable "fuellt"?
Das return „füllt“ überhaupt nichts, es gibt etwas zurück.
Und wenn du das nicht entgegen nimmst, dann ist es danach „weg“.
MfG ChrisB
Hallo,
Heisst das im endeffekt, dass ich den Funktionsaufruf in eine Variable "speichern" muss, damit das return die Variable "fuellt"?
entweder in einer Variablen speichern, oder direkt verwenden, etwa in einer Berechnung.
Ciao,
Martin
Hey
Heisst das im endeffekt, dass ich den Funktionsaufruf in eine Variable "speichern" muss, damit das return die Variable "fuellt"?
entweder in einer Variablen speichern, oder direkt verwenden, etwa in einer Berechnung.
Meinem Verstaendnis nach, verwende ich die Variable direkt, und zwar in einem mysql_fetch_row. Oder was genau ist die Bedeutung von "direkt verwenden"?
gruesse
<maddin>
Hi,
entweder in einer Variablen speichern, oder direkt verwenden, etwa in einer Berechnung.
Meinem Verstaendnis nach, verwende ich die Variable direkt, und zwar in einem mysql_fetch_row.
Nein, du verwendest sie gar nicht, weil sie nicht existiert an der Stelle - bitte langsam mal in den Schädel kriegen ...
Oder was genau ist die Bedeutung von "direkt verwenden"?
function foo() {
return 4711;
}
echo 13 * foo() + 7; // Rückgabewert von foo() „direkt verwendet“
MfG ChrisB
Servus
Meinem Verstaendnis nach, verwende ich die Variable direkt, und zwar in einem mysql_fetch_row.
Nein, du verwendest sie gar nicht, weil sie nicht existiert an der Stelle - bitte langsam mal in den Schädel kriegen ...
Unnoetiger Satz. Der Code haette schon gereicht meine Frage zu beantworten, aber ja, es ist jetzt im Schaedel drinne.
Oder was genau ist die Bedeutung von "direkt verwenden"?
function foo() {
return 4711;
}echo 13 * foo() + 7; // Rückgabewert von foo() „direkt verwendet“
Eine geruhsame Nacht noch
<maddin>
Hi,
Meinem Verstaendnis nach, verwende ich die Variable direkt, und zwar in einem mysql_fetch_row.
Nein, du verwendest sie gar nicht, weil sie nicht existiert an der Stelle - bitte langsam mal in den Schädel kriegen ...
Unnoetiger Satz.
Nein, weil „deinem Verständnis nach“ ja immer noch falsch war.
MfG ChrisB
Hi,
Aber jetzt meckert php, dass im zweiten Beispiel $sql nicht gefunden wird,
Es gibt ja auch kein $sql in diesem Gültigkeitsbereich.
Habe ich noch einen Fehler uebersehen, oder kann ich einen Rueckgabewert, der ein mysql_query ist, nicht zurueckgeben?
Doch, aber du nimmst die Rückgabe nirgends in Empfang.
MfG ChrisB
Hallo,
Jetzt moechte ich gerne das global loswerden, und hab alles umgeaendert zu:
sowenig wie möglich globale Variablen zu haben, ist eine gute Idee.
function art($art) {
$sql=mysql_query("...")
return $sql:
}if(isset($art)) {
// Dein primärer Fehler:
// um nun Zugriff auf die Ressource zu haben, die mysql_query()
// im Erfolgsfall zurückgibt, musst Du den Rückgabewert Deiner
// Funktion einer Variablen zuweisen
Statt:
art($art);
// $sql = art($art);
// Allerdings solltest Du spätestens hier berücksichtigen, dass
// mysql_query() auch false zurückgeben kann, z.B. weil der MySQL-Server
// gerade nicht erreichbar ist ...
while ($row = mysql_fetch_row($sql)) {
usw...
}
}
> Habe ich noch einen Fehler uebersehen, oder kann ich einen Rueckgabewert, der ein mysql\_query ist, nicht zurueckgeben?
Sicher kannst Du das, Du musst auf diesen Rückgabewert auch zugreifen :-)
Freundliche Grüße
Vinzenz
n'Abend,
// Dein primärer Fehler:
// um nun Zugriff auf die Ressource zu haben, die mysql_query()
// im Erfolgsfall zurückgibt, musst Du den Rückgabewert Deiner
// Funktion einer Variablen zuweisen
das habe ich verstanden.
// Allerdings solltest Du spätestens hier berücksichtigen, dass
// mysql_query() auch false zurückgeben kann, z.B. weil der MySQL-Server
// gerade nicht erreichbar ist ...
dafuer ist gesorgt ;)
Sicher kannst Du das, Du musst auf diesen Rückgabewert auch zugreifen :-)
Kapiert. Aber in den meisten Beispielen wird einfach auf die Rueckgabevariable zugegriffen, ich dachte, dass funktioniert bei mir dann auch.
function a($param){
$rueck=$param*3
return $rueck;
}
a(3);
echo $rueck;
ich versteh nicht, wo da der unterschied zu einer Version mit MySQL-Befehlen besteht
Gruesse
<maddin>
Hi,
Kapiert. Aber in den meisten Beispielen wird einfach auf die Rueckgabevariable zugegriffen, ich dachte, dass funktioniert bei mir dann auch.
Was für Beispiele, wo und wofür?
function a($param){
$rueck=$param*3
return $rueck;
}a(3);
echo $rueck;
> ich versteh nicht, wo da der unterschied zu einer Version mit MySQL-Befehlen besteht
Da besteht kein Unterschied zu dem nicht funktionierenden Code, den du vorher hattest - dieser hier funktioniert genauso wenig.
Selbst wenn du das fehlende Semikolon ergänzt, wirst du damit nur die Meldung bekommen, dass die Variable $rueck in der echo-Zeile nicht existiert. (Sofern du das error\_reporting vernünftig auf E\_ALL und display\_errors auf 1 eingestellt hast.)
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Hey
Was für Beispiele, wo und wofür?
Mein Fehler, habe Sachen gedacht, die ich nicht haette denken sollen ;)
Da besteht kein Unterschied zu dem nicht funktionierenden Code, den du vorher hattest - dieser hier funktioniert genauso wenig.
Tatsache.
Selbst wenn du das fehlende Semikolon ergänzt, wirst du damit nur die Meldung bekommen, dass die Variable $rueck in der echo-Zeile nicht existiert. (Sofern du das error_reporting vernünftig auf E_ALL und display_errors auf 1 eingestellt hast.)
Ist alles so eingestellt, nur man wird halt manchmal etwas kirre und uebersieht gern bestimmmte Dinge.
Freundliche Gruesse
<maddin>