我正在編寫一個用於瀏覽XML文檔的函數,並且需要使用遞歸。這不是相當行爲如何我想要的,所以開始運行一些測試。爲什麼這個遞歸的例子不起作用?
<?php
$i=0;
function recursion(){
$i++;
if($i < 10){recursion();}
echo $i;
}
recursion();
?>
這生成一個500內部服務器錯誤。好像我在處理不當的東西 - 有人可以幫我嗎?
我正在編寫一個用於瀏覽XML文檔的函數,並且需要使用遞歸。這不是相當行爲如何我想要的,所以開始運行一些測試。爲什麼這個遞歸的例子不起作用?
<?php
$i=0;
function recursion(){
$i++;
if($i < 10){recursion();}
echo $i;
}
recursion();
?>
這生成一個500內部服務器錯誤。好像我在處理不當的東西 - 有人可以幫我嗎?
$i
函數裏面沒有引用全局變量$i
,所以它總是1,腳本溢出了堆棧。
你可以做$i
全球性的,但它是更好的把它作爲參數傳遞:
function recursion($i){
$i++;
if($i < 10){recursion($i);}
echo $i;
}
recursion(0);
或使它私人'私人$ _i = 0'到類,並使用$這個來訪問它('$ this-_i' ) –
@sweettea:我在這裏沒有看到上課。 – Jon
我以爲他向我們展示了部分代碼。 –
你缺少參數
$i=0;
function recursion($i){
$i++;
if($i < 10){recursion($i);}
echo $i;
}
recursion($i);
試圖通過i
作爲參數傳遞給函數增加後,否則它不會被識別
<?php
function recursion($i = 0){
$i++;
if($i < 10){recursion($i);}
echo $i;
}
recursion();
?>
您在函數中引用$ i作爲局部變量。如果你想引用德全局變量使用保留字全球:
<?php
$i=0;
function recursion(){
global $i;
$i++;
if($i < 10){recursion();}
echo $i;
}
recursion();
?>
其他的答案將正常工作,但沒有人提到這個選項,所以我就扔在那裏。
您也可以使用關鍵字static
:
function recursion(){
static $i = 0;
$i++;
if($i < 10){recursion();}
echo $i;
}
recursion();
的$ I範圍是在你的榜樣地方,$我是越來越在每次調用初始化併成爲無限循環。 PHP通過在達到200通話後產生致命錯誤而中止腳本
致命錯誤:達到'200'的最大功能嵌套級別,正在中止!
請嘗試,
$i = 0;
function recursion() {
global $i;
$i++;
echo $i;
if ($i < 10) {
recursion();
}
}
recursion();
你需要添加'全局變量$ I;'到函數的頂部。這將允許$我保留它的價值..但是我不知道你想達到什麼。 – Pebbl
將此添加到函數的第一行:'global $ i;' – Farnabaz
@Farnabaz:這將使代碼運行,但這是最糟糕的可能解決方案,因爲它鼓勵全局變量。 – Jon