我会尝试使用fetch_object(' Classname')来测试此方法。
Inserent.php中的Class Inserent:
namespace classes\model;
class Inserent{
private $nummer;
private $nickname;
private $email;
public function __construct ($nummer, $nickname, $email){
$this->nummer = $nummer;
$this->nickname = $nickname;
$this->email = $email;
}
public function getNummer(){
return $this->nummer;
}
public function setNummer($nummer){
$this->nummer = $nummer;
}
...
}
使用在Mapper-Class InserentDAO.php中:
namespace classes\mapper;
use classes\model\Inserent;
class InserentDAO{
private $dbConnect;
public function __construct (){
$this->dbConnect = MySQLDatabase::getInstance();
}
public function readAll(){
$sql = "SELECT inserentennummer, nickname, email FROM inserent";
$inserent = null;
$inserentList = array();
if ($result = $this->dbConnect->query($sql)) {
while ($inserent = $result->fetch_object('classes\model\Inserent')) {
$inserentList[] = $inserent;
}
$result->close();
}
return $inserentList;
}
...
}
我收到错误,我的对象是空的:
警告:类\ model \ Inserent :: __ construct()缺少参数1 在D:\ xampp \ htdocs \ workspace \ secondStep \ classes \ model \ Inserent.php on 第10行
警告:类\ model \ Inserent :: __ construct()缺少参数2 在D:\ xampp \ htdocs \ workspace \ secondStep \ classes \ model \ Inserent.php on 第10行
警告:类\ model \ Inserent :: __ construct()缺少参数3 在D:\ xampp \ htdocs \ workspace \ secondStep \ classes \ model \ Inserent.php on 第10行
注意:未定义的变量:nummer in D:\ xampp \ htdocs \ workspace \ secondStep \ classes \ model \ Inserent.php on 第11行
注意:未定义的变量:昵称 D:\ xampp \ htdocs \ workspace \ secondStep \ classes \ model \ Inserent.php on 第12行
注意:未定义的变量:电子邮件输入 D:\ xampp \ htdocs \ workspace \ secondStep \ classes \ model \ Inserent.php on 第13行
但是,如果我更改代码,在Mapper中,它将起作用。
代码InserentDAO.php的一部分:
while ($obj = $result->fetch_object()) {
$inserent = new Inserent($obj->inserentennummer, $obj->nickname, $obj->email);
$inserentList[] = $inserent;
}
答案 0 :(得分:1)
我相信fetch_object
会调用一个空构造函数,然后根据它获取的结果列设置属性。 There is a comment on the manual confirming that.
所以这就是fetch_object("classes\model\Inserent")
正在做的事情:
$object = new classes\model\Inserent();
$object->inserentennummer = $result['inserentennumer'];
$object->nickname = $result['nickname'];
$object->email = $result['email'];
return $object;
这就是为什么它抱怨缺少参数和未定义的变量(他们是private
)。
显而易见的解决方案是重构您的类以提供空构造函数和公共属性:
namespace classes\model;
class Inserent{
public $nummer;
public $nickname;
public $email;
public function __construct ($nummer = 0, $nickname = "", $email = ""){
//...
将属性公开的替代方法是使用__set
魔术方法,但您仍然需要提供零参数构造函数。
答案 1 :(得分:0)
感谢您的回答!!
我必须按照你解释的方式更改我的Class Inserenten.php中的构造函数。此外,我不得不从" $ nummer"更改属性名称。 to" $ inserentennummer",因为数据库表属性具有此名称。我还必须向构造函数添加查询。
方法__set()没有帮助。
class Inserent{
private $inserentennummer;
private $nickname;
private $email;
public function __construct ($inserentennummer = 0, $nickname = "", $email = ""){
if(!$this->inserentennummer){
$this->inserentennummer = $inserentennummer;
}
if(!$this->nickname){
$this->nickname = $nickname;
}
if(!$this->email){
$this->email = $email;
}
}
然后它正在工作:-)