Das macht mich verrückt. Rekursive Funktionen scheinen in 5.4.4 und 5.1.6 (Hosting-Server eines Clients, über den ich keine Kontrolle habe) anders zu funktionieren. Ich kann es nicht wirklich erklären, mit Ausnahme von Beispiel:PHP rekursive Funktionen funktionieren in verschiedenen Versionen anders?
<?php
$simpsons[0] = array("name"=>"Abe","parent"=>-1);
$simpsons[1] = array("name"=>"Homer","parent"=>0); // Homer's parent is Abe
$simpsons[2] = array("name"=>"Bart","parent"=>1); // Bart's parent is Homer
$simpsons[3] = array("name"=>"Lisa","parent"=>1); // Lisa's parent is Homer
$simpsons[4] = array("name"=>"Maggie","parent"=>1); // Maggie's parent is Homer
function get_children($parent) {
global $simpsons;
foreach ($simpsons as $index=>$onesimpson) {
if ($onesimpson["parent"]==$parent) {
echo "$onesimpson[name] is a child of ".$simpsons[$parent]["name"].".<br />\n";
get_children($index);
}
}
}
get_children(0);
?>
auf PHP 5.4.4 die Ausgabe
Homer is a child of Abe.
Bart is a child of Homer.
Lisa is a child of Homer.
Maggie is a child of Homer.
während auf PHP ist 5.1.6 die Ausgabe
Homer is a child of Abe.
Bart is a child of Homer.
I bin nicht gut mit Terminologie, so kann ich nicht erklären, was passiert (es ist wie in 5.1.6 die aufgerufene Funktion ändert den Parameter der aufrufenden Funktion, selbst wenn die aufgerufene Funktion beendet ist), aber ich habe dies in PHP Sandbox online getestet diese zwei versi ons und das Problem ist identisch - es ist nicht spezifisch für meine Einrichtung oder das Hosting-Server-Setup.
Problem bestätigt: http://3v4l.org/n1mVc –
Sie definieren nie $ Simpsons als ein Array, das die erste rote Flagge für mich ist. Wenn Sie '$ simpsons = array();' unmittelbar nach ' Php' hinzufügen, wirkt sich das auf irgendetwas aus? –
@ AndrewG.Johnson: So traurig wie es mich macht, ist das gültige PHP-Code. '$ simpsons [0] = array (" name "=>" Abe "," parent "=> - 1);' erstellt einfach automatisch ein Array. Docs: http://www.php.net/manual/en/language.types.array.php#language.types.array.syntax.modify Es ist sehr davon abgeraten, aber es ist gültig. –