【发布时间】:2019-04-30 02:14:09
【问题描述】:
下面定义了一个类
class table {
public $mysqli;
public $display;
public function mysqli() {
$mysqli = new mysqli('hostname', 'username', 'password', 'database');
return $mysqli;
}
public function __construct() {
$this->mysqli = $this->mysqli();
}
public function display() {
$sql = "SELECT * FROM table";
if($data = $this->mysqli->query($sql)) {
$this->display = $data->fetch_assoc();
};
}
}
$table = new table();
$table->display();
while($table->display) {
$this->display['name']. " " . $this->display['country'];
};
公共函数$this->display 被分配了一个值$data->fetch_assoc()。间接地,while($table->display = $data->fetch_assoc()) 等价于while($data->fetch_assoc()。但结果不会遍历列表。相反,它只会一遍又一遍地显示第一行,直到系统崩溃。
是否有我不知道的指导 php 类的规则,或者我错过了我的命令?
【问题讨论】:
-
“公共函数
$this->display” - 这是一个属性,而不是一个方法 “被分配了一个值” - 确切地说,是 - 过去时。之后您将不再在任何地方更新此内容。 -
while循环实际上并没有做任何事情。在任何情况下,在遍历数组时使用foreach而不是while更习惯用法。 -
@misorude。如果忽略使用上面示例中的类,而不是将查询编写为
while($row = $display->fetch_assoc()) { // do this }。做这样的事情会不会错。$row = $display->fetch_assoc(); while($row) { //do this }。因为第二种是我正在使用的那种尝试。 -
是的,这当然是错误的,因为在您最初分配第一行的内容之后,$row 的值永远不会改变。如果 $row 永远不会改变,那么
while($row)也没有理由终止。 -
感谢您的回答 misorude。我想这就是问题所在