*/ abstract class ReaderEntity extends Entity { protected int $lastModified; // modification timestamp /** * returns decoded json if input is json, otherwise returns input * * @return string|array */ public function conditional_json_decode(string $el): mixed { /** @var array $result */ $result = json_decode($el); if (json_last_error() === JSON_ERROR_NONE) { return $result; } else { return $el; } } public function getLastModified(): int { return $this->lastModified; } public function setLastModified(int $lastModified): void { $this->lastModified = $lastModified; $this->markFieldUpdated('lastModified'); } /** * @psalm-return SerializedEntity */ abstract public function toService(): array; /** * @psalm-return SerializedEntity */ abstract public function jsonSerialize(): array; }