如何不将 set 用于 ID 但需要它用于 Object 的构造函数
How not to use set for ID but need it for constructor of Object
我正在尝试创建一个项目,其中我有一个带有 Mysql 的数据库,并且我正在从中添加和 updating/deleting 数据。
问题是,我不应该为 ID 使用集合,因为我在将 INSERT 插入 de DB 时使用 AUTO_INCREMENT。
然后,因此,当我从 de DB 取回数据时,我将其转换为对象数组,但我不知道如何在不使用 setId() 的情况下执行此操作。好吧,也许通过代码你会更理解我想说的。
这就是我将 INSERT 发送到数据库的方式(此代码在控制器中):
// prepare and bind
$stmt = $conn->prepare("INSERT INTO db_musics (name, band, dateBirth, type)
VALUES (?, ?, ?, ?)");
$stmt->bind_param("sssi", $name, $band, $dateBirth, $type);
然后是将返回的数组从 DB 转换为适当对象的问题(这是获取 DB 的函数的代码的一部分):
while($row = mysqli_fetch_assoc($result)) {
switch ($row["type"]) {
case 1: #Vocalist
$ms = new Vocalist($row["id"],$row["name"],$row["band"],$row["dateBirth"]);
break;
case 2: #Guitarist
$ms = new Guitarist($row["id"],$row["name"],$row["band"],$row["dateBirth"]);
break;
case 3: #Drummer
$ms = new Drummer($row["id"],$row["name"],$row["band"],$row["dateBirth"]);
break;
default:
$ret[1] = 3; #Estat de l'operacio, error al array
return $ret;
break;
}
array_push($arrayMusicsObjectes, $ms); #Inserir cada music al array
}
真正的问题来了,构造函数:
<?php
require_once(__DIR__.'/MusicAbstract.php');
class Drummer extends MusicAbstract{
public function getInstrument(){
return 'Drum';
}
public function __construct($id, $name, $band, $dateBirth){
$this->getId();
$this->setName($name);
$this->setBand($band);
$this->setDateBirth($dateBirth);
}
}
所以在构造函数中,我得到了 $id,但如何将它放入对象中?
希望我已经正确解释了自己(英语不是我的母语)。
提前致谢! :D
你为什么要在构造函数中 getId()
而不是设置它?
$this->getId();
是不是应该换成$this->setId()
?
当然,如果您的模型中有 setId()
方法
更新
因此,如果您不需要使用 setId()
方法,只需删除此行并以这种方式附加 属性:$this->id = $id
在构造函数中你应该有 setId
方法:
public function __construct($id, $name, $band, $dateBirth){
$this->setId($id);
$this->setName($name);
$this->setBand($band);
$this->setDateBirth($dateBirth);
}
如果您正在创建新对象以插入数据库并且您希望使用自动增量 ID,您应该将 ID 设置为 null
:
$drummer = new Drummer(null, $name, $band, $dateBirth);
我正在尝试创建一个项目,其中我有一个带有 Mysql 的数据库,并且我正在从中添加和 updating/deleting 数据。
问题是,我不应该为 ID 使用集合,因为我在将 INSERT 插入 de DB 时使用 AUTO_INCREMENT。
然后,因此,当我从 de DB 取回数据时,我将其转换为对象数组,但我不知道如何在不使用 setId() 的情况下执行此操作。好吧,也许通过代码你会更理解我想说的。
这就是我将 INSERT 发送到数据库的方式(此代码在控制器中):
// prepare and bind
$stmt = $conn->prepare("INSERT INTO db_musics (name, band, dateBirth, type)
VALUES (?, ?, ?, ?)");
$stmt->bind_param("sssi", $name, $band, $dateBirth, $type);
然后是将返回的数组从 DB 转换为适当对象的问题(这是获取 DB 的函数的代码的一部分):
while($row = mysqli_fetch_assoc($result)) {
switch ($row["type"]) {
case 1: #Vocalist
$ms = new Vocalist($row["id"],$row["name"],$row["band"],$row["dateBirth"]);
break;
case 2: #Guitarist
$ms = new Guitarist($row["id"],$row["name"],$row["band"],$row["dateBirth"]);
break;
case 3: #Drummer
$ms = new Drummer($row["id"],$row["name"],$row["band"],$row["dateBirth"]);
break;
default:
$ret[1] = 3; #Estat de l'operacio, error al array
return $ret;
break;
}
array_push($arrayMusicsObjectes, $ms); #Inserir cada music al array
}
真正的问题来了,构造函数:
<?php
require_once(__DIR__.'/MusicAbstract.php');
class Drummer extends MusicAbstract{
public function getInstrument(){
return 'Drum';
}
public function __construct($id, $name, $band, $dateBirth){
$this->getId();
$this->setName($name);
$this->setBand($band);
$this->setDateBirth($dateBirth);
}
}
所以在构造函数中,我得到了 $id,但如何将它放入对象中?
希望我已经正确解释了自己(英语不是我的母语)。
提前致谢! :D
你为什么要在构造函数中 getId()
而不是设置它?
$this->getId();
是不是应该换成$this->setId()
?
当然,如果您的模型中有 setId()
方法
更新
因此,如果您不需要使用 setId()
方法,只需删除此行并以这种方式附加 属性:$this->id = $id
在构造函数中你应该有 setId
方法:
public function __construct($id, $name, $band, $dateBirth){
$this->setId($id);
$this->setName($name);
$this->setBand($band);
$this->setDateBirth($dateBirth);
}
如果您正在创建新对象以插入数据库并且您希望使用自动增量 ID,您应该将 ID 设置为 null
:
$drummer = new Drummer(null, $name, $band, $dateBirth);