Warum ist die Funktion " call-by-reference in PHP veraltet?
Schrieb ich den folgenden code:
<?php
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
echo $a1." ".$a2." ".$a3. "<br />";
fix_names($a1, $a2, $a3);
echo $a1." ".$a2." ".$a3;
function fix_names(&$n1, &$n2, &$n3)
{
$a1 = ucfirst(strtolower(&$n1));
$a2 = ucfirst(strtolower(&$n2));
$a3 = ucfirst(strtolower(&$n3));
}
?>
Erhielt ich diese Mitteilung: Veraltet: Call-time pass-by-reference wurde als veraltet markiert
Ich brauche eine Erklärung warum erhalte ich diese Mitteilung? Und warum in PHP Version 5.3.13, das ist veraltet?
- stackoverflow.com/questions/4665782/...
- Gab es irgendeinen besonderen Grund, warum Sie wurden mit call-time pass-by-reference hier überhaupt?
- Wie, warum (nur eine Vermutung): Call-time pass-by-reference kann zu unerwartetem Verhalten führen, wenn die Funktion nicht erwarten, Referenzen.
- Fand die offiziellen Grund: "Übergabe von Argumenten per Referenz an Funktion war veraltet, die für die code-Sauberkeit Gründen. Eine Funktion ändern kann seine Argumente in eine nicht dokumentierte Möglichkeit, wenn es uns nicht erklären, dass das argument wird als Referenz übergeben werden. Um zu verhindern, dass Nebenwirkungen es ist besser, um anzugeben, welche Argumente per Referenz in die Funktion der Erklärung nur."
- Wie zu sehen, was passiert!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist alles dokumentiert auf der PHP Übergabe by Reference manual-Seite. Insbesondere (Hervorhebung von mir):
Als solche, es war veraltet (und wirft eine Warnung) in PHP 5.3.x und scheitern wird in PHP 5.4.
Sagte, es ist ein trivial zu beheben. Einfach aktualisieren Sie Ihre fix_names-Funktion wie folgt:
Übrigens, die 5.3.die x-Serie ist schon ziemlich in die Jahre gekommen, so wäre es ratsam ein update auf eine neuere build (nach Durchführung der notwendigen Tests), wenn überhaupt möglich.
Entfernen Sie die
&
Symbole von Ihr wie:&$n1
,&$n2
, ...verwenden Sie dieses....
fix_names(&$a1 &$a2, &$a3);