2013-02-15 126 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