2013-02-15 131 views
1

爲什麼下面的腳本不起作用?返回數組內部函數返回另一個值

$arr = array(); 

function collect($array , $val) { 
    $array[] = $val; 
    return $array; 
} 

function checkFoo($s) { 

    $valid = true; 

    if (strlen($s) === 0) { 
     $isValid = false; 
     collectFoo($arr , $s); 
    } 

    return $valid; 
} 

function checkBar($t) { 

    $valid = true; 

    if (strlen($s) != 10) { 
     $isValid = false; 
     collectFoo($arr , $t); 
    } 

    return $valid; 
} 

if (checkFoo($that) && checkBar($this)) { 

    echo "success"; 

} else { 

    print_r($error); 

} 

我總是

Notice: Undefined variable: error in /my.php on line 12 

其中線12類似的collect(...)第二次出現;

我知道一個函數只能返回一個值,但是如果一個函數返回某個函數返回的內容呢?因爲collectcheckBar內返回$array,返回$valid

+0

'$ this'和'$ that'以及'$ error'和'collectFoo'函數是什麼? – 2013-02-15 22:52:59

+0

'$ this'&'$ that'是佔位符。 '$ error'是一個數組,它只是在調試時仍然存在,'collectFoo'是一個向數組添加內容的函數。 – Sven 2013-02-15 23:08:36

+0

好的,看我編輯的答案 – 2013-02-15 23:11:49

回答

1

你正在使用一個全局變量($ arr),所以你需要這樣聲明它。例如:

function checkFoo($s) { 
    global $arr; // declare $arr to be usable inside this function scope 
    $valid = true; 

    if (strlen($s) === 0) { 
     $isValid = false; 
     collectFoo($arr , $s); 
    } 

    return $valid; 
} 
0

編輯

你需要更多的練習,因爲完全你的代碼是不正確! 你必須改變你的代碼的這個部分:

$arr = array(); 

function collectFoo($arr , $val) { 
    global $arr; 

    $arr[] = $val; 
} 

function checkFoo($s) { 
    global $arr; 

    $valid = false; 
    if (strlen($s) === 0) { 
     $valid = false; 
     collectFoo($arr , $s); 
    } 
    return $valid; 
} 

function checkBar($t) { 
    global $arr; 

    $valid = true; 
    if (strlen($t) != 10) { 
     $valid = false; 
     collectFoo($arr , $t); 
    } 
    return $valid; 
} 

$a = checkFoo($that); 
$b = checkBar($this); 
if ($a && $b) { 
    echo 'Success !'; 
} else { 
    print_r($err); 
} 
+0

對不起,但我只是'Array([0] => [1] =>)' – Sven 2013-02-15 23:19:35

0

你是不是聲明你$arr變量,使用它的功能中的全局。你可以找到關於那個here的一些信息。

而且,它不看你實際使用的collect返回值一樣,所以我說,你的問題是,無論是checkBarcheckFoo正在返回假的,它讓你通過對print_r功能下降,與一個$error變量,你還沒有初始化。

最後,在我看來,您的collect函數實際上並沒有對$arr變量做任何事情,因爲您沒有通過引用將它傳遞給collect。你可以通過參考here閱讀傳遞變量。還有一個S.O.關於這個問題here