Tenho uma classe Task, essa classe tem um atributo $message que pode ser editado apenas se o status for 'pending', então criei uma classe para cada status, todas as classes tem o método editMessage(), o problema é: Como modificar $message sem ter que tornar publico o atributo?
class Task
{
private string $message;
private TaskState $state;
public function __construct(string $message)
{
$this->state = new TaskPendingState($this);
$this->message = $message;
}
public function setState(TaskState $state): void
{
$this->state = $state;
}
public function getState(): TaskState
{
return $this->state;
}
public function editMessage(string $message): void
{
// !!! como fazer isso funcionar sem tornar $this->message publico?
$this->state->editMessage($message);
}
public function getMessage(): string
{
return $this->message;
}
}