Advertisement
Guest User

Option.php

a guest
Jun 7th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.59 KB | None | 0 0
  1. <?php
  2.  
  3. abstract class COption
  4. {
  5.     public static function of($data)
  6.     {
  7.         return ($data != NULL ? new CSome($data) : new CNone());
  8.     }
  9.  
  10.     public abstract function isDefined();
  11.  
  12.     public abstract function map($mapping);
  13.  
  14.     public abstract function flatMap($mapping);
  15.  
  16.     public abstract function filter($filter);
  17.  
  18.     public abstract function __invoke($action);
  19.  
  20.     public abstract function get();
  21.  
  22.     public abstract function getOrElse($default);
  23. };
  24.  
  25. final class CSome extends COption
  26. {
  27.     private $data = NULL;
  28.  
  29.     protected function __construct($data)
  30.     {
  31.         $this->data = $data;
  32.     }
  33.  
  34.     public function isDefined()
  35.     {
  36.         return true;
  37.     }
  38.  
  39.     public function map($mapping)
  40.     {
  41.         return new CSome($mapping($this->data));
  42.     }
  43.  
  44.     public function flatMap($mapping)
  45.     {
  46.         return $mapping($this->data);
  47.     }
  48.  
  49.     public function filter($filter)
  50.     {
  51.         return ($filter($this->data) == true ? $this : COption::of(NULL));
  52.     }
  53.  
  54.     public function __invoke($action)
  55.     {
  56.         $action($this->data);
  57.     }
  58.  
  59.     public function get()
  60.     {
  61.         return $this->data;
  62.     }
  63.  
  64.     public function getOrElse($default)
  65.     {
  66.         return $this->data;
  67.     }
  68. };
  69.  
  70. final class CNone extends COption
  71. {
  72.     protected function __construct()
  73.     {
  74.     }
  75.  
  76.     public function isDefined()
  77.     {
  78.         return false;
  79.     }
  80.  
  81.     public function map($mapping)
  82.     {
  83.         return $this;
  84.     }
  85.  
  86.     public function flatMap($mapping)
  87.     {
  88.         return $this;
  89.     }
  90.  
  91.     public function filter($filter)
  92.     {
  93.         return $this;
  94.     }
  95.  
  96.     public function __invoke($action)
  97.     {
  98.     }
  99.  
  100.     public function get()
  101.     {
  102.         throw false;
  103.     }
  104.  
  105.     public function getOrElse($default)
  106.     {
  107.         return $default;
  108.     }
  109. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement