Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- abstract class COption
- {
- public static function of($data)
- {
- return ($data != NULL ? new CSome($data) : new CNone());
- }
- public abstract function isDefined();
- public abstract function map($mapping);
- public abstract function flatMap($mapping);
- public abstract function filter($filter);
- public abstract function __invoke($action);
- public abstract function get();
- public abstract function getOrElse($default);
- };
- final class CSome extends COption
- {
- private $data = NULL;
- protected function __construct($data)
- {
- $this->data = $data;
- }
- public function isDefined()
- {
- return true;
- }
- public function map($mapping)
- {
- return new CSome($mapping($this->data));
- }
- public function flatMap($mapping)
- {
- return $mapping($this->data);
- }
- public function filter($filter)
- {
- return ($filter($this->data) == true ? $this : COption::of(NULL));
- }
- public function __invoke($action)
- {
- $action($this->data);
- }
- public function get()
- {
- return $this->data;
- }
- public function getOrElse($default)
- {
- return $this->data;
- }
- };
- final class CNone extends COption
- {
- protected function __construct()
- {
- }
- public function isDefined()
- {
- return false;
- }
- public function map($mapping)
- {
- return $this;
- }
- public function flatMap($mapping)
- {
- return $this;
- }
- public function filter($filter)
- {
- return $this;
- }
- public function __invoke($action)
- {
- }
- public function get()
- {
- throw false;
- }
- public function getOrElse($default)
- {
- return $default;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement