@lexstile

Можно ли аргумент функции (array) принудительно привести к объекту?

# Аргумент $project в данном случае массив, можно ли его сделать принудительно объектом, не прописывая: $project = (object)$project;
	public function mapperProject($project) {
		return (object)[
			'id' => $project->id,
			'name' => $project->name,
			'alias' => $project->alias,
			'logo' => $this->helperProject->getProjectLogoURL($project->logo),
			'active' => $project->active,
		];
	}
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
profesor08
@profesor08 Куратор тега PHP
А зачем эти сложности? Тебе хочется пользоваться объектами, так в чем проблема не использовать для этого массивы, чтоб потом не думать, как эти массивы переводить в объекты. И молиться, что ты не упустил какое-то там свойство, которое тебе выстрелит неизвестно когда.

<?php

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

class ProjectWithLogo extends Project {
  public string $logo;
  
  public function __construct(Project $project, string $logo) {
    $this->id = $project->id;
    $this->name = $project->name;
    $this->logo = $logo;
  }
}

function mapperProject(Project $project): ProjectWithLogo {
  return new ProjectWithLogo($project, "logo-path");
}

var_dump(mapperProject(new Project(123, "Pet Project")));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы