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

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 に答える
1

エコー/印刷されて返されない必要がある値の唯一の例は、実行中のスクリプトが別のスレッドにあるため、値を「返す」場所がない特定のAJAXアプリケーションです。その場合、値を出力する必要があり、呼び出し元のXHR関数によって取得されます。

$stateあなたの例はどこにも値を宣言していません。どちらの例も、。以外のものをエコーし​​たり返したりすることはありませんnull

于 2012-12-20T08:14:44.610 に答える
0

戻ってエコーしたい場合は、次のようにするだけです。

echo $state;
return $state;

値を返すこととそれをエコーすることは、2 つの異なる無関係なアクションです。

于 2012-12-20T08:08:56.460 に答える