【发布时间】:2015-08-10 09:53:39
【问题描述】:
在过去的几天里,我一直在用头撞到一堵相当坚硬的墙上,试图掌握 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!"
?>
但是,如果我要在结果集合上尝试此操作,则相同的参数将返回 '' 或 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() 的实际问题还是设计使然?
有没有办法达到类似的预期结果?
基本上我已经编写了一系列课程,这些课程现在取决于这个“错误”,我还有其他方法可以解决它,但它们不太理想,我宁愿接受挑战并学习一些东西。
感谢您的宝贵时间。
更新: 很有可能我的循环写错了,因为我刚刚测试过:
<?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;
}
}
?>
看来我得到了结果,我明天会更深入地测试它。
【问题讨论】:
-
你没有使用
extends -
extends在这种情况下不是必需的,因为我没有扩展任何一个类,而是使用一个类来创建另一个类。 -
感谢您的评论
-
mysqli_result::fetch_object -- mysqli_fetch_object -- 将结果集的当前行作为对象返回.. 试试看this
-
对不起,我觉得我根本没有帮助你..