0

我是 PHP OOP 的新手。

我想从数据库中检索所有结果,但不是在方法内使用 echo 而是使用 RETURN (因为我经常听到方法不应该回显任何东西,而只是返回),正如我在以下所做的那样:

class MySqlDb {

    public $conn;
    public $numRows;

    function __construct($host, $un, $p, $db) {
        $this->conn = new mysqli($host, $un, $p, $db);
    }

    function get_smth() {
        // $conn = new mysqli($host, $un, $p, $db);
        $q = "SELECT * FROM posts";
        $r = $this->conn->query($q) or die(mysqli_error());
        $this->numRows = $r->num_rows;
        // return "<p>A total of $this->numRows records were found</p>";
        while ($row = $r->fetch_assoc()) {
            echo $row['title'].'<br>';
        }
    }

}

$t = new MySqlDb( 'localhost', 'root', '', 'oop' );
$t->get_smth();

我想更改echo $row['title'].'<br>';return $row['title'].'<br>';仍然工作(现在如果我使用返回,我只会得到第一个结果)。需要改变什么?

4

3 回答 3

1

在 PHP(和大多数语言)中,函数的执行一旦到达第一条return语句就会停止。为了返回多个东西,你必须返回某种数据结构——最常见的是数组。

于 2013-08-01T16:43:47.540 回答
0

只需将所有内容加载到数组中并返回数组。将输出格式保留在此类之外,并将其留给调用此类的任何内容。

$return_array = array();
while ($row = $r->fetch_assoc()) {
    $return_array[]['title'] =  $row['title'];
}
return $return_array;
于 2013-08-01T16:42:31.470 回答
0
function get_smth() {
    // $conn = new mysqli($host, $un, $p, $db);
    $q = "SELECT * FROM posts";
    $r = $this->conn->query($q) or die(mysqli_error());
    return  $r->fetch_all();
}

然后在调用函数时遍历结果:

foreach ($t->get_smth() as $array){
    // do something
}
于 2013-08-01T16:44:33.503 回答