@AlexandrMa

Как работать с NULL значениями с моделях?

class Product
{
  public int $id;
  public string $name;
  public ?string $date = NULL;  //может быть заполнен, не обязательно

  public function __construct(int $id, string $name)
  {
    $this->id = $id;
    $this->name = $name;
  }

  public function getName(): string
  {
    return $this->name;
  }

  public function getDate(): string
  {
    return $this->date;
  }

  public function setDate(string $date): void
  {
    $this->date = $date;
  }

}



class ProductCollection{

  public function create(Product $product){

    $cols = [
      'name' => $product->getName(),
      'date' => $product->getDate()
    ];

    var_dump($cols);

    //save to DataBase
  }

}




$a = new Product(1, "Name1");


$b = new Product(2, "Name2");
$b->setDate('2023-02-28');


$m = new ProductCollection;
$m->create($a);
$m->create($b);


Возникает ошибка: Fatal error: Uncaught TypeError: Return value of Product::getDate() must be of the type string, null returned

Хотя я указал, что поле date строка, или NULL.
Где ошибка и как лучше вообще работать с NULL?

В базе данных mysql колонка date как раз имеет тип date, по дефолту NULL, то есть туда можно добавить только '2023-02-28' или NULL
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Ошибка в том, что вы указали возвращаемый тип строго string
Сделайте его null|string

public function getDate(): ?string
{
    return $this->date;
}


UPD
Ну и если уж оно заполняетсся в конструкторе, то правильнее и там исправить

// Здесь убрать инициализацию, потому что в конструкторе всё равно заполнится
public ?string $date;

// А здесь, наоборот, указать дефолтное значение
public function __construct(int $id, ?string $name = null)
{
    $this->id = $id;
    $this->name = $name;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы