我是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;