在过去的几天里,我一直在用一块坚硬的墙撞击我的头,想要掌握 mysqli_result :: fetch_object()。
我要做的是基于预先编写的类来实例化一个对象数组,该类包含我操作所需的方法。 够简单吗?当然,直到我尝试将构造函数参数传递给每个对象。
现在,将参数传递给单个实例中的类的构造函数,如下所示:
<?php
class classA {
private $dbo;
function __construct() {
$this->dbo = new mysqli('127.0.0.1', 'user', 'pass', 'dbName', 3306);
}
public function createObject() {
$stmt = $this->dbo->query("SELECT `column` FROM `table` WHERE `column` = 'value';");
return $stmt->fetch_object('classB', array("A Parameter!"));
}
}
class classB {
private $param;
function __construct($param) {
$this->param = $param;
}
public function getParam() {
return $this->param;
}
}
$classA = new classA();
echo $classA->createObject()->getParam(); //Returns "A Parameter!"
?>
但是,如果我在一组结果上尝试这个,那么相同的参数将返回&#39;&#39;或null,如下例所示:
<?php
class classA {
private $dbo;
function __construct() {
$this->dbo = new mysqli('127.0.0.1', 'user', 'pass', 'dbName', 3306);
}
public function createObjects() {
$stmt = $this->dbo->query("SELECT `column` FROM `table` WHERE `column` LIKE '%value%';");
$myObjects = array();
foreach($stmt as $result) {
$myObjects[] = $result->fetch_object("classB", array("A Parameter!"));
}
return $myObjects;
}
}
class classB {
private $param;
function __construct($param) {
$this->param = $param;
}
public function getParam() {
return $this->param;
}
}
$classA = new classA();
$i = 0;
foreach($classA->createObjects() as $anObject) {
echo "object[{$i}]:'{$anObject->getParam()}'<br />"; //Returns nothing?
$i ++;
}
?>
至少,这就是它在我的机器上的表现。
现在提出问题: 这是 mysqli_result :: fetch_object()的实际问题还是设计?
有哪种方法可以达到类似的预期结果?
基本上我已经编写了一系列课程,现在这些课程都依赖于这个&#34;错误&#34;我有其他方法,但它们不太可取,我宁愿受到挑战并学到一些东西。
感谢您的时间。
更新 很可能我的循环写得不正确,因为我刚刚测试过:
<?php
class classA {
private $dbo;
function __construct() {
$this->dbo = new mysqli('127.0.0.1', 'user', 'pass', 'dbName', 3306);
}
public function createObjects() {
$stmt = $this->dbo->query("SELECT `column` FROM `table` WHERE `column` LIKE '%value%';");
$myObjects = array();
if($result = $this->dbo->query("SELECT `column` FROM `table`;")) {
while($row = $result->fetch_object("classB", array("A Parameter!"))) {
$myObjects[] = $row;
}
}
return $myObjects;
}
}
?>
看来我得到了一个结果,明天我将对此进行更深入的测试。
答案 0 :(得分:0)
好的事实证明我只是一个笨蛋,上面提到的循环不正确。
以下是完整的工作示例:
<?php
class classA {
private $dbo;
function __construct() {
$this->dbo = new mysqli('127.0.0.1', 'user', 'pass', 'dbName', 3306);
}
public function createObjects() {
$stmt = $this->dbo->query("SELECT `column` FROM `table` WHERE `column` LIKE '%value%';");
$myObjects = array();
if($result = $this->dbo->query("SELECT `column` FROM `table`;")) {
while($row = $result->fetch_object("classB", array("A Parameter!"))) {
$myObjects[] = $row;
}
}
return $myObjects;
}
}
class classB {
private $param;
function __construct($param) {
$this->param = $param;
}
public function getParam() {
return $this->param;
}
}
$classA = new classA();
$i = 0;
foreach($classA->createObjects() as $anObject) {
echo "object[{$i}]:'{$anObject->getParam()}'<br />"; //Returns "object[x]:'A Parameter!'<br />"
$i ++;
}
?>
再次感谢您的时间。