Bu beni delirtiyor. Özyinelemeli fonksiyonlar 5.4.4 ve 5.1.6'da (kontrolüm olmayan bir müşterinin barındırma sunucusu) farklı çalışır. Gerçekten örnek dışında bunu açıklayamam:PHP özyinelemeli fonksiyonlar farklı versiyonlarda farklı mı çalışıyor?
PHP On<?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);
?>
çıktı PHP üzerinde
Homer is a child of Abe.
Bart is a child of Homer.
Lisa is a child of Homer.
Maggie is a child of Homer.
ederken çıkış
Homer is a child of Abe.
Bart is a child of Homer.
I 5.1.6 olduğunu 5.4.4 Terminolojiyle pek iyi değilim, bu yüzden neler olduğunu açıklayamıyorum (5.1.6'daki çağrılan işlev çağrılan işlev bittiğinde bile çağrılan işlevin parametresini değiştirir), ancak bunu PHP sanal alanında çevrimiçi olarak test ettim. bu iki versi sorunlar ve sorun aynı - kurulum veya barındırma sunucusu kurulumuna özgü değil.
Sorun onaylandı: http://3v4l.org/n1mVc –
$ simpsons'ı, benim için ilk kırmızı bayrak olan bir dizi olarak asla tanımlamazsınız. Eğer '$ simpsons = array() 'i eklerseniz' 'hemen sonra <
@ AndrewG.Johnson: Beni bu kadar üzdüğü kadar geçerli PHP kodu. $ simpsons [0] = dizi ("name" => "Abe", "parent" => - 1); 'bir dizi otomatik olarak oluşturacaktır. Dokümanlar: http://www.php.net/manual/en/language.types.array.php#language.types.array.syntax.modifying Bu son derece cesaret kırıcı fakat geçerli. –