name = $name; $this->arguments = $arguments; $this->parseArguments(); } public function __toString() { return implode(' ', array_filter([ "{$this->name}(" . implode(", ", $this->arguments) . ")", $this->as ? "AS {$this->as}" : false, ])); } public function as($fieldName) { $this->as = $fieldName; return $this; } protected function parseArguments() { foreach($this->arguments as &$item) { $item = Sql::escape($item); } } }; } public static function escape($value) { switch(true) { case is_object($value): # @TODO Make sure the object is a Field return (string) $value; break; case is_string($value): $value = "\"$value\""; break; case is_null($value): $value = "NULL"; break; } return $value; } public static function parameter($value) : string { } }