2012-12-20 93 views
0

在一個PHP函數中,有時我發現某些東西可以被回顯,但它不能被返回。'echo'VS'return'的PHP要求

例如,這成功地Echo的結果到頁面:

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變量在其他地方被調用,並且被包含爲全局變量,但不包含在該示例中。有趣的是,當我改變函數返回$狀態。它會像我期望的那樣返回結果,但僅當我追加空字符串時纔會執行此操作。爲什麼會這樣?

+2

什麼是$狀態,它在哪裏聲明? – Daniel

+0

它應該返回...你確定你確定以同樣的方式給它們打電話嗎? – Baba

+4

根據你的基礎是什麼代碼的假設?您是否嘗試過使用返回值的函數'echo get_page_id(...)'? – iMoses

回答

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

0

如果你想返回和迴音,你只需要做:

echo $state; 
return $state; 

返回一個值和它呼應是兩個不同的和不相關的操作。

1

必須回顯/打印並且不返回的值的唯一示例是某些AJAX應用程序,其中正在運行的腳本位於不同的線程中,因此無處可返回值。在這種情況下,該值必須輸出,它被調用XHR函數捕獲。

您的示例沒有在任何地方聲明$state值。您的兩個示例都不會回顯或返回除null以外的其他任何內容。

+0

'$ stmt-> bind_result($ state);'? – Supericy