[PHP] Problem mit "Call-time pass-by-reference"

anddie

Well-known member
ID: 171
L
3 Mai 2006
2.270
133
Hi,

PHP5 liefert bei mir aktuell permanent folgende Warnung und tut nichts mehr(mit der 4er Version lief es zumindest)
PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /test.php on line 455, referer: test.php

Kann mir einer verständlich (bei google verstehe ich nur Bahnhof) erklären, wo das Problem liegt? Scheinbar irgendwas mit der Variablenübergabe, die alle per GET übergeben werden.

anddie
 
Wenn ich mich recht entsinne, hat das mit der Übergabe der Parameter bei Funktionen zu tun. Es war möglich, die Parameter als Referenz zu übergeben, indem man ihnen einfach ein & voranstellte. Die Funktion hatte dann nicht eine lokale Kopie der Variable, sondern wirklich die Referenz auf die eigentliche Variable, so dass alle Änderungen an der Variablen auch ausserhalb der Funktion gültig waren.

In PHP5 wurde das so verändert, dass diese Übergabe bei Funktionen nun immer explizit im Funktionsheader angegeben werden muss.

Mal an 'nem Beispiel verdeutlichen:

In PHP4 war das hier problemlos möglich:
PHP:
//           v- kein & im Funktionsheader
function bar($foo) { $foo = 'bar'; }
$foo = 'foo';
//   v- das & bei der Übergabe
bar( &$foo );
echo $foo; // Ausgabe => bar
Dies würde nun in PHP5 'nen Fehler geben, da diese Art der Übergabe deprecated ist.

Hier müsste der Code so aussehen:
PHP:
//           v- hier das & im Funktionsheader
function bar(&$foo) { $foo = 'bar'; }
$foo = 'foo';
//   v- kein & bei der Übergabe
bar( $foo );
echo $foo;
 
Da bei mir in Zeile 455 folgender Funktionsaufruf steht:
PHP:
if (!login("username$code","password$code","logout$code",&$BODY))
verstehe ich das dann richtig, dass ich die Funktion login entsprechend anpassen muss? Die wäre dann nämlich in Zeile 508
PHP:
function login($usernameVar,$passwdVar,$logoutVar,&$BODY)

Scheint nämlich doch falsch zu sein, wenn ich dort vor jedes $-Zeichen noch ein & setze, kommt der gleiche Fehler.

anddie
 
Args, das hab ich übersehen. Danke.

Ich hasse uralte Scriptseiten, die dämlich programmiert wurden. Das schöne Apache-Errorlog läuft derzeit richtig voll.

anddie
 
dämlich.. war damals die einzigste möglichkeit, sowas zu erreichen.
Einzige heißt das. ;)
Und die gesamte Seite ist nicht sonderlich optimal geschrieben. Außerdem total mit Javascript überlastet und zwischendrin kommen auf einmal cgi-Sachen, obwohl das genausogut mit PHP gegangen wäre.

anddie