在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时。'';它会像我期望的那样返回结果,但只有当我追加空字符串时才会这样做。为什么会这样?
答案 0 :(得分:1)
必须回显/打印并且不返回的值的唯一示例是在某些AJAX应用程序中,其中正在运行的脚本位于不同的线程中,因此无法“返回”值。在这种情况下,必须输出值,调用XHR函数捕获该值。
您的示例未在任何位置声明$state
值。除null
之外,您的示例都不会回显或返回任何内容。
答案 1 :(得分:1)
However, this function does not return the value:
我无法重现那种行为
e.g。
<?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 :(得分:0)
如果你想返回并回声,你只需要这样做:
echo $state;
return $state;
返回一个值并回显它是两个不同且无关的动作。