name = $name; self::$filters[$name] = $this; } public function name(){ return $this->name; } public function __toString(){ return $this->filter; } public static function named(string $name){ if(!isset(self::$filters[$name])){ throw new \Exception("Filter {$name} is not defined"); } return self::$filters[$name]; } public static function add(string $name, string $filter){ if(isset(self::$filters[$name])){ throw new \Exception("Filter {$name} is already defined"); } return new Filter($name, $filter); } } Filter::add('not null', 'is not null'); Filter::add('null', 'is null'); ?>