It took me a while to realize, but reading this:
public function status($status = null)
{
if ($status !== null) {
$this->status = (int) $status;
return $this;
}
return $this->status;
}
I could see that when you set the status, you return the entity, but if you don't, you return the status, return type is varying and it's confusing.
How about a setStatus() and a getStatus() method instead ?