Bei der Ausführung eines PHP-Scripts kann es zur
folgenden Fehlermeldungen kommen:
Warning: Call-time pass-by-reference has been deprecated - argument passed by value
Was hat es mit dieser Meldung auf sich?
Der folgende PHP-Code sollte das Problem illustrieren:
Download Code!
<?php
function foo($v) {
$v++;
}
function bar(&$v) {
$v++;
}
$x = 1;
$y = 1;
// Erzeugt eine Warnung
foo(&$x);
// Ab PHP5 der einzig "richtige" weg.
bar($y);
?>
Ihr sehen könnt werden zwei Funktionen deklariert.
Einmal die Funktion foo() und einmal die Funktion bar(). In
beiden Fällen wird eine Variable übergeben, die um
eins hoch gezählt wird (Typprüfung werden in diesem
Beispiel weggelassen).
Danach werden die Variablen x und y angelegt. Jetzt kommt der
spannende Teil. Falls man die Variable via Call-by-reference
übergeben möchte, und dies so wie in der Funktion
foo() macht, kommt es zu der Warnung:
Warning: Call-time pass-by-reference has been deprecated - argument passed by value
Das bedeutet, falls man die Variable via Call-by-reference
übergeben möchte, muss man dies bereits in der
Funktionsdefinition, wie bei der Funktion bar(), machen.
Quickhacks
Es gibt aber noch zwei weitere Möglichkeiten um
schnell das Problem zu umschiffen. Achtung das Problem wird hiermit
nicht gelöst, sondern es wird nun nicht mehr angezeigt.
Erste Möglichkeit
Um die Unterdrückung der Fehlermeldungen und
Warnungen zu erreichen, kann man ein Anfang des Skripts folgenden Code stellen:
Download Code!
Zweite Möglichkeit
Durch setzen des folgenden Eintrags in der php.ini, kann man
die Warnung auch unterdrücken:
Download Code!
allow_call_time_pass_reference = On
Dritte Möglichkeit
Ein .htaccess Datei mit folgedem Inhalt erstellen und diese ins Wurzelverzeichnis kopieren:
Download Code!
php_value allow_call_time_pass_reference 1