- var_dump: documentation ( source)
- trim: documentation ( source)
- in_array: documentation ( source)
- strtolower: documentation ( source)
<?php
class EventStatus
{
const SUCCESS = 'success';
const STOPPED = 'stopped';
const FAILED = 'failed';
private static $validStatuses = [
self::SUCCESS,
self::STOPPED,
self::FAILED
];
private $status = self::SUCCESS;
public function __construct($aStatus = self::SUCCESS)
{
$this->status = $this->sanitizeAndValidate($aStatus);
}
public static function __callStatic($aStatus, $arguments = [])
{
return new static($aStatus);
}
public function isSuccess()
{
return ($this->status == static::SUCCESS);
}
public function isStopped()
{
return ($this->status == static::STOPPED);
}
public function isFailed()
{
return ($this->status == static::FAILED);
}
private function sanitize($aStatus)
{
return strtolower(trim($aStatus));
}
private function validate($aStatus)
{
if (!in_array($aStatus, static::$validStatuses)) {
throw new DomainException("Invalid event status [$aStatus]");
}
}
private function sanitizeAndValidate($aStatus)
{
$sanitized = $this->sanitize($aStatus);
$this->validate($sanitized);
return $sanitized;
}
}
$status = EventStatus::Failed();
var_dump($status, $status->isSuccess());