从类中返回多个结果,使用Return而不是echo


Return multiple results from class with return instead echo?

我是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>';,并且仍然工作(现在如果我使用return,我只得到第一个结果)。什么需要改变?

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

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
}

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

$return_array = array();
while ($row = $r->fetch_assoc()) {
    $return_array[]['title'] =  $row['title'];
}
return $return_array;