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(...);

我知道一个函数只能返回一个值,但是如果一个函数在一个返回一些东西的函数中返回一些东西呢?因为collect返回$array里面checkBar那个返回$valid

4

3 回答 3

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;
}
于 2013-02-15T22:49:46.640 回答
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 );
}
于 2013-02-15T23:02:50.237 回答
0

您没有$arr在使用它的函数中将变量声明为全局变量。你可以在这里找到一些关于它的信息。

此外,看起来您实际上并没有使用 的返回值collect,所以我会说您的问题是要么checkBar返回false,要么使用未初始化的变量checkFoo,这使您陷入函数.print_r$error

最后,在我看来,你的collect函数实际上并没有对$arr变量做任何事情,因为你没有通过collect引用传递它。您可以在此处通过引用阅读有关传递变量的信息。这里还有一个关于这个的问题

于 2013-02-15T23:04:06.197 回答