如何不将 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);