InputValidator
云策文档标注
概述
InputValidator 是一个用于验证输入参数的实用工具类,提供了一系列静态方法来检查输入是否符合特定类型或条件,如字符串、数组键、可迭代对象等。
关键要点
- InputValidator 类包含多个静态方法,用于验证输入参数的类型和可访问性。
- 方法包括 is_string_or_stringable、is_numeric_array_key、is_stringable_object、has_array_access、is_iterable 和 is_curl_handle。
- 这些方法支持跨 PHP 版本的兼容性,例如 is_iterable 方法用于替代 PHP 7.1 之前的版本。
- 代码示例展示了每个方法的实现逻辑,如使用正则表达式验证数字数组键。
代码示例
final class InputValidator {
public static function is_string_or_stringable($input) {
return is_string($input) || self::is_stringable_object($input);
}
public static function is_numeric_array_key($input) {
if (is_int($input)) {
return true;
}
if (!is_string($input)) {
return false;
}
return (bool) preg_match('`^-?[0-9]+$`', $input);
}
public static function is_stringable_object($input) {
return is_object($input) && method_exists($input, '__toString');
}
public static function has_array_access($input) {
return is_array($input) || $input instanceof ArrayAccess;
}
public static function is_iterable($input) {
return is_array($input) || $input instanceof Traversable;
}
public static function is_curl_handle($input) {
if (is_resource($input)) {
return get_resource_type($input) === 'curl';
}
if (is_object($input)) {
return $input instanceof CurlHandle;
}
return false;
}
}注意事项
- is_iterable 方法用于支持 PHP 5.6 到 7.0 的版本,因为 PHP 7.1 才引入了原生 is_iterable() 函数。
- is_curl_handle 方法考虑了 PHP 8.0 中 Curl 句柄从资源类型变为 CurlHandle 类的变化。
- 所有方法都是静态的,可以直接调用,无需实例化 InputValidator 类。
原文内容
Input validation utilities.
Methods
| Name | Description |
|---|---|
| InputValidator::has_array_access | Verify whether a received input parameter is _accessible as if it were an array_. |
| InputValidator::is_curl_handle | Verify whether a received input parameter is a Curl handle. |
| InputValidator::is_iterable | Verify whether a received input parameter is “iterable”. |
| InputValidator::is_numeric_array_key | Verify whether a received input parameter is usable as an integer array key. |
| InputValidator::is_string_or_stringable | Verify that a received input parameter is of type string or is “stringable”. |
| InputValidator::is_stringable_object | Verify whether a received input parameter is “stringable”. |
Source
final class InputValidator {
/**
* Verify that a received input parameter is of type string or is "stringable".
*
* @param mixed $input Input parameter to verify.
*
* @return bool
*/
public static function is_string_or_stringable($input) {
return is_string($input) || self::is_stringable_object($input);
}
/**
* Verify whether a received input parameter is usable as an integer array key.
*
* @param mixed $input Input parameter to verify.
*
* @return bool
*/
public static function is_numeric_array_key($input) {
if (is_int($input)) {
return true;
}
if (!is_string($input)) {
return false;
}
return (bool) preg_match('`^-?[0-9]+$`', $input);
}
/**
* Verify whether a received input parameter is "stringable".
*
* @param mixed $input Input parameter to verify.
*
* @return bool
*/
public static function is_stringable_object($input) {
return is_object($input) && method_exists($input, '__toString');
}
/**
* Verify whether a received input parameter is _accessible as if it were an array_.
*
* @param mixed $input Input parameter to verify.
*
* @return bool
*/
public static function has_array_access($input) {
return is_array($input) || $input instanceof ArrayAccess;
}
/**
* Verify whether a received input parameter is "iterable".
*
* @internal The PHP native `is_iterable()` function was only introduced in PHP 7.1
* and this library still supports PHP 5.6.
*
* @param mixed $input Input parameter to verify.
*
* @return bool
*/
public static function is_iterable($input) {
return is_array($input) || $input instanceof Traversable;
}
/**
* Verify whether a received input parameter is a Curl handle.
*
* The PHP Curl extension worked with resources prior to PHP 8.0 and with
* an instance of the `CurlHandle` class since PHP 8.0.
* <a href="https://www.php.net/manual/en/migration80.incompatible.php#migration80.incompatible.resource2object/">https://www.php.net/manual/en/migration80.incompatible.php#migration80.incompatible.resource2object</a>
*
* @param mixed $input Input parameter to verify.
*
* @return bool
*/
public static function is_curl_handle($input) {
if (is_resource($input)) {
return get_resource_type($input) === 'curl';
}
if (is_object($input)) {
return $input instanceof CurlHandle;
}
return false;
}
}