When designing APIs, prioritize flexibility and developer experience by: 1. **Accept broader parameter types** - Use `callable` instead of `Closure` to support various invocation patterns:
When designing APIs, prioritize flexibility and developer experience by:
callable
instead of Closure
to support various invocation patterns:// Instead of this (restrictive):
public function throw(?Closure $callback = null)
// Do this (flexible):
public function throw(?callable $callback = null)
// Example from date formatting:
public function format(string $format): static
{
$this->format = $format;
return $this;
}
// Usage:
$date->format('Y-m-d')->after('2023-01-01');
// Example with status code handling:
if (is_numeric($callback) || is_string($callback) || is_array($callback)) {
$callback = static::response($callback);
}
// Instead of:
public static function query($array, $encodingType = PHP_QUERY_RFC3986)
// Do this:
public static function query($array, HttpQueryEncoding $encodingType = HttpQueryEncoding::Rfc3986)
Flexible APIs improve developer experience by being intuitive, reducing errors, and accommodating different coding styles while maintaining robustness and clarity.
Enter the URL of a public GitHub repository