返回返回另一个值的函数内部数组

时间:2013-02-15 22:41:14

标签: php

为什么以下脚本不起作用?

$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(...)的第二次出现;

我知道一个函数只能返回一个值,但是如果一个函数返回一个返回某个东西的函数呢?由于collect会在$array内返回返回checkBar的{​​{1}}。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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 );
}

答案 2 :(得分:0)

您并未将$arr变量声明为使用它的函数内的全局变量。您可以找到有关here的一些信息。

此外,您实际上看起来并未使用collect的返回值,因此我说您的问题是checkBar或{{1}返回false,这会使您使用尚未初始化的checkFoo变量进入print_r函数。

最后,在我看来,您的$error函数实际上并没有对collect变量执行任何操作,因为您没有通过引用将其传递给$arr。您可以通过引用here阅读传递变量。还有S.O.关于这个here的问题。