for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Tleckie\DesignPatterns\State;
/**
* Class Car
*
* @package Tleckie\DesignPatterns\State
* @author Teodoro Leckie Westberg <[email protected]>
*/
class Car
{
/** @var CarState */
private CarState $state;
* Car constructor.
* @param CarState $state
public function __construct(CarState $state)
$this->changeState($state);
}
private function changeState(CarState $state): void
$this->state = $state;
* @return $this
public function brake(): Car
$this->changeState($this->state->brake());
return $this;
public function speedUp(): Car
$this->changeState($this->state->speedUp());
public function turnOff(): Car
$this->changeState($this->state->turnOff());
public function turnOn(): Car
$this->changeState($this->state->turnOn());
* @return bool
public function isOn(): bool
return !$this->state instanceof OffState;