【问题标题】:PHP requirements of a 'echo' VS 'return''echo' VS 'return' 的 PHP 要求
【发布时间】:2012-12-07 17:02:14
【问题描述】:

在 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.'';它按照我的预期返回结果,但只有当我附加空字符串时它才会这样做。为什么会这样?

【问题讨论】:

  • 什么是 $state,它在哪里声明?
  • 它应该返回......你确定你用同样的方式称呼它们吗?
  • 你基于什么代码做这个假设?你试过echo get_page_id(...)使用返回值的函数吗?
  • @iMoses yes echo get_page_id() 确实按照您的建议工作。我正在使用: die(get_page_id());这不起作用,这对我来说没有意义,因为 echo 确实产生了预期的结果。
  • 当回显字符串时,echo 命令在die 命令之前执行。当返回一个值并且什么都不做时,不会打印任何内容。

标签: php return echo


【解决方案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

【讨论】:

    【解决方案2】:

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

    您的示例没有在任何地方声明 $state 值。除了null,您的示例都不会回显或返回任何内容。

    【讨论】:

    • $stmt-&gt;bind_result($state);?
    【解决方案3】:

    如果你想返回并回显你只需要这样做:

    echo $state;
    return $state;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-13
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2012-03-12
      相关资源
      最近更新 更多