0

在 PHP 函数中,有时我发现可以回显某些内容,但无法返回。

例如,这成功地将结果回显到页面上:

function get_page_id( $path ) {

global $mysqli;
if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) {
    $stmt->bind_param("s", $city);
    $stmt->execute();
    $stmt->bind_result($state);
    $stmt->fetch();
    $stmt->close();
    echo $state;
}

}

但是,此函数不返回值:

function get_page_id( $path ) {

global $mysqli;
if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) {
    $stmt->bind_param("s", $city);
    $stmt->execute();
    $stmt->bind_result($state);
    $stmt->fetch();
    $stmt->close();
    return $state;
}

}

是什么让一个值能够被回显但不能被返回?

$state 变量在别处被调用,并作为全局变量包含在内,但未包含在示例中。有趣的是,当我将函数更改为返回 $state.''; 它按照我的预期返回结果,但只有当我附加空字符串时它才会这样做。为什么会这样?

4

3 回答 3

1

必须回显/打印且不返回的值的唯一示例是在某些 AJAX 应用程序中,其中正在运行的脚本在不同的线程中,因此无处“返回”值。在这种情况下,必须输出该值,并由调用 XHR 函数捕获。

您的示例未在任何地方声明$state值。您的两个示例都不会回显或返回除null.

于 2012-12-20T08:14:44.610 回答
1

However, this function does not return the value:我无法重现这种行为

例如

<?php
$mysqli = new mysqli('localhost', 'localonly', 'localonly', 'test');
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
setup($mysqli);

$state = get_page_id('acity');
echo 'state: ', $state;

function get_page_id( $city ) {
    global $mysqli;
    if ($stmt = $mysqli->prepare("SELECT state FROM tmp_country WHERE city = ?")) {
        $stmt->bind_param("s", $city);
        $stmt->execute();
        $stmt->bind_result($state);
        $stmt->fetch();
        $stmt->close();
        return $state;
    }
}


function setup($mysqli) {
    $mysqli->query('
        CREATE TEMPORARY TABLE tmp_country (
            id int auto_increment,
            city varchar(32),
            state varchar(32),
            primary key(id),
            unique key(city)
        )
    ') or die($mysqli->error);
    $mysqli->query("INSERT INTO tmp_country (city,state) VALUES ('acity','astate'),('bcity','bstate')") or die($mysqli->error);
}

state: astate按预期在我的机器上打印。

于 2012-12-20T08:32:02.150 回答
0

如果您想返回并回显,您只需执行以下操作:

echo $state;
return $state;

返回一个值并回显它是两个不同且不相关的操作。

于 2012-12-20T08:08:56.460 回答