ko-ko-ko / assert
快速灵活的 PHP 断言
1.1.0
2016-03-26 16:26 UTC
Requires (Dev)
- phpunit/phpunit: ~4.8.21
This package is not auto-updated.
Last update: 2024-09-25 15:19:24 UTC
README
又一个验证器,为什么??
它非常快,并且设计用于任何方法
还有很多其他酷炫的断言,但为了它们的可用性,你必须付出时间和执行内存的代价。这个断言给你一个非常简单且快速的 API。
安装
安装此扩展的首选方式是通过 composer。
php composer.phar require --prefer-dist ko-ko-ko/assert "~1.1.0"
或者将以下行添加到 composer.json
的 require 部分
"ko-ko-ko/assert": "~1.1.0"
使用方法
use KoKoKo\assert\Assert; Assert::assert($var, 'var')->notEmpty()->string(); // It's the same as if (empty($var)) { throw new \InvalidArgumentException('Param $var must be not empty'); } if (!is_string($var)) { throw new \InvalidArgumentException('Param $var must be string'); }
基本 API
assert($value, $name)
构建验证对象
$value
检查值。必须是:array、bool、float、int、null、string$name
变量名称,用于异常消息。必须是字符串
// OK Assert::assert('', 'var')->isEmpty(); Assert::assert(5, 'var', '\LogicException'); // EXCEPTION: var MUST NOT be an object Assert::assert(new stdClass(), 'var');
验证 API
通用断言
isEmpty 检查值是否为空
- 对立面:notEmpty
// OK Assert::assert('', 'var')->isEmpty(); Assert::assert('5', 'var')->notEmpty(); // EXCEPTION Assert::assert('5', 'var')->isEmpty(); Assert::assert([], 'var')->notEmpty();
isArray 检查值是否为数组
// OK Assert::assert([], 'var')->isArray(); // EXCEPTION Assert::assert('5', 'var')->isArray();
bool 检查值是否为布尔值
// OK Assert::assert(false, 'var')->bool(); // EXCEPTION Assert::assert('5', 'var')->bool();
float 检查值是否为浮点数
// OK Assert::assert(15.2, 'var')->float(); // EXCEPTION Assert::assert('15.2', 'var')->float(); Assert::assert([], 'var')->float();
int 检查值是否为整数
// OK Assert::assert(15, 'var')->int(); // EXCEPTION Assert::assert(15.2, 'var')->int(); Assert::assert([], 'var')->int();
numeric 检查值是否为数值
// OK Assert::assert(15, 'var')->numeric(); // EXCEPTION Assert::assert('*', 'var')->numeric();
isNull 检查值是否为 null
- 对立面:notNull
// OK Assert::assert(null, 'var')->isNull(); Assert::assert('a', 'var')->notNull(); // EXCEPTION Assert::assert('a', 'var')->isNull(); Assert::assert(null, 'var')->notNull();
string 检查值是否为字符串
// OK Assert::assert('5', 'var')->string(); // EXCEPTION Assert::assert([], 'var')->string();
resource 检查值是否为资源
// OK Assert::assert(tmpfile(), 'var')->resource(); // EXCEPTION Assert::assert(5, 'var')->resource();
inArray($range) 检查值是否在数组 $range 中
参数
$range
必须是数组
// OK Assert::assert('a', 'var')->inArray(['a', 'b']); // EXCEPTION Assert::assert('c', 'var')->inArray(['a', 'b']); // ---------- // EXCEPTION: $range MUST be array Assert::assert(['a'], 'var')->inArray('a');
isSame($anotherValue) 检查值是否与 $anotherValue 相同
- 对立面:notSame
参数
$anotherValue
必须不是对象
// OK Assert::assert('a', 'var')->isSame('a'); // EXCEPTION Assert::assert('a', 'var')->isSame('b'); // ---------- // EXCEPTION: $anotherValue MUST be not object Assert::assert('a', 'var')->isSame(new \stdClass());
notSame($anotherValue) 检查值是否与 $anotherValue 不同
- 对立面:isSame
参数
$anotherValue
必须不是对象
// OK Assert::assert('a', 'var')->notSame('b'); // EXCEPTION Assert::assert('a', 'var')->notSame('a'); // ---------- // EXCEPTION: $anotherValue MUST be not object Assert::assert('a', 'var')->notSame(new \stdClass());
字符串断言
所有字符串断言都按顺序运行
- string
digit 检查值是否只包含数字
// OK Assert::assert('5', 'var')->digit(); // EXCEPTION Assert::assert('c', 'var')->digit(); // ---------- // EXCEPTION: var MUST be string Assert::assert(5, 'var')->digit();
match($pattern) 检查值是否匹配正则表达式模式
参数
$pattern
必须是正确的正则表达式模式
// OK Assert::assert('a', 'var')->match('/a/'); // EXCEPTION Assert::assert('b', 'var')->match('/a/'); // ---------- // EXCEPTION: pattern MUST be not empty Assert::assert('a', 'var')->match(''); // EXCEPTION: var MUST be string Assert::assert(5, 'var')->match('/a/'); // EXCEPTION: pattern MUST be correct RegExp Assert::assert('a', 'var')->match('/a');
glob($pattern) 检查值是否匹配 glob 模式
// OK Assert::assert('aa', 'var')->glob('a*'); // EXCEPTION Assert::assert('bb', 'var')->glob('a*'); // ---------- // EXCEPTION: pattern MUST be not empty Assert::assert('a', 'var')->glob(''); // EXCEPTION: pattern MUST be string Assert::assert('a', 'var')->glob(false); // EXCEPTION: var MUST be string Assert::assert(5, 'var')->glob('/a/');
length($length) 检查值长度是否正好为 $length
参数
$length
必须是大于等于 0 的整数
// OK Assert::assert('aa', 'var')->length(2); // EXCEPTION Assert::assert('bb', 'var')->length(5); // ---------- // EXCEPTION: length MUST be int Assert::assert('a', 'var')->length(null); // EXCEPTION: length MUST be more >= 0 Assert::assert('a', 'var')->length(-2); // EXCEPTION: var MUST be string Assert::assert(5, 'var')->length(1);
lengthLess($length) 检查值长度是否小于 $length
- 对立面:lengthMore
参数
$length
必须是大于 0 的整数
// OK Assert::assert('aa', 'var')->lengthLess(5); Assert::assert('bb', 'var')->lengthMore(1); // EXCEPTION Assert::assert('bb', 'var')->lengthLess(1); Assert::assert('aa', 'var')->lengthMore(5); // ---------- // EXCEPTION: length MUST be int Assert::assert('a', 'var')->lengthLess(null); Assert::assert('a', 'var')->lengthMore(null); // EXCEPTION: length MUST be more >= 0 Assert::assert('a', 'var')->lengthLess(-2); Assert::assert('a', 'var')->lengthMore(-2); // EXCEPTION: var MUST be string Assert::assert(5, 'var')->lengthLess(1); Assert::assert([], 'var')->lengthMore(1);
lengthBetween($from, $to) 检查值长度是否在 $from <= $value <= $to
参数
$from
必须是大于等于 0 的整数$to
必须是大于等于 0 的整数$from
必须小于$to
// OK Assert::assert('aa', 'var')->lengthBetween(1, 5); // EXCEPTION Assert::assert('bb', 'var')->lengthBetween(3, 10); // ---------- // EXCEPTION: form MUST be int Assert::assert('a', 'var')->lengthBetween(null, 5); // EXCEPTION: to MUST be int Assert::assert('a', 'var')->lengthBetween(1, []); // EXCEPTION: form MUST be more >= 0 Assert::assert('a', 'var')->lengthBetween(-2, 5); // EXCEPTION: form MUST be more than to Assert::assert('a', 'var')->lengthBetween(5, 1); // EXCEPTION: var MUST be string Assert::assert(5, 'var')->lengthBetween(1);
数字断言(int 或 float)
所有数字必须是 int 或 float
positive 检查值是否为正数(非 0)
- 对立面:negative
检查值是否为负数(非 0)
// OK Assert::assert(1, 'var')->positive(); Assert::assert(-5, 'var')->negative(); // EXCEPTION Assert::assert(-1, 'var')->positive(); Assert::assert(0, 'var')->positive(); Assert::assert(10, 'var')->negative(); Assert::assert(0, 'var')->negative(); // ---------- // EXCEPTION: var MUST be int or float Assert::assert('A', 'var')->positive(); Assert::assert([], 'var')->negative();
less($number) 检查值是否小于等于 $number
- 类似:lessStrict 检查值是否小于
$number
- 对立面:more 检查值是否大于等于
$number
- 对立面:moreStrict 检查值是否大于
$number
参数
$number
必须是整数或浮点数
// OK Assert::assert(1, 'var')->less(2); Assert::assert(10, 'var')->more(5); // EXCEPTION Assert::assert(10, 'var')->less(5); Assert::assert(1, 'var')->more(2); // ---------- // EXCEPTION: length MUST be int or float Assert::assert(1, 'var')->less(null); Assert::assert(1, 'var')->more(null); // EXCEPTION: var MUST be int or float Assert::assert('A', 'var')->less(1); Assert::assert([], 'var')->more(1);
between($from, $to) 检查值是否在 $from <= $value <= $to
- 类似:betweenStrict 检查值是否在
$from < $value < $to
参数
$from
一定要是 int 或 float$to
一定要是 int 或 float$from
必须小于$to
// OK Assert::assert(2, 'var')->between(1, 5); // EXCEPTION Assert::assert(2.5, 'var')->between(3, 10); // ---------- // EXCEPTION: form MUST be int Assert::assert(2, 'var')->between(null, 5); // EXCEPTION: to MUST be int Assert::assert(2, 'var')->between(1, []); // EXCEPTION: form MUST be more than to Assert::assert(2, 'var')->between(5, 1); // EXCEPTION: var MUST be int or float Assert::assert('A', 'var')->between(1);
数组断言
hasKey($key) 检查数组中是否存在该键
参数
$key
一定要是字符串或 int
// OK Assert::assert(['a' => 'b', 'c' => 'd'], 'data')->hasKey('a'); // EXCEPTION Assert::assert(['a' => 'b', 'c' => 'd'], 'data')->hasKey('e'); // ---------- // EXCEPTION: data MUST be an array Assert::assert('notArray', 'data')->hasKey(1); // EXCEPTION: key MUST be string or int Assert::assert(['a' => 'b', 'c' => 'd'], 'data')->hasKey(null);
count($count) 检查数组元素数量是否与 $count 相同
参数
$count
一定要是大于 0 的 int
// OK Assert::assert(['a', 'b', 'c'], 'data')->count(3); // EXCEPTION Assert::assert(['a', 'c', 'd'], 'data')->count(1); // ---------- // EXCEPTION: data MUST be an array Assert::assert('notArray', 'data')->hasKey(1); // EXCEPTION: count MUST be int Assert::assert(['a', 'c', 'd'], 'data')->count(null); // EXCEPTION: count MUST be greater than 0 Assert::assert(['a', 'c', 'd'], 'data')->count(-5);
循环断言 API
forList 对列表中的每个元素运行可调用的函数
// OK $data = [1, 2, 3, 4, 5]; Assert::assert($data, 'data')->forList( function (Assert $assert) { $assert->int()->positive(); } ); // ---------- // EXCEPTION: data MUST be array Assert::assert('some data', 'data')->forList( function (Assert $assert) {} ); // EXCEPTION: $data: key 'a' MUST be int Assert::assert(['a' => 'b'], 'data')->forList( function (Assert $assert) {} );
forMap 对映射中的每个元素运行可调用的函数
注意:类似于 ['1' => 'a', '2' => 'b']
的数组,PHP 将转换为 [1 => 'a', 2 => 'b']
// OK $data = ['A' => 'A1', 'B' => 'B1', 'C' => 'C1']; Assert::assert($data, 'data')->forMap( function (Assert $keyAssert, Assert $valueAssert) { $keyAssert->lengthMore(1); $valueAssert->lengthMore(1); } ); // ---------- // EXCEPTION: data MUST be array Assert::assert('some data', 'data')->forMap( function (Assert $keyAssert, Assert $valueAssert) {} );
类型转换 API
get 返回值不变
// RETURN 'a' Assert::assert('a', 'var')->get();
toBool 将任何类型转换为 bool
// RETURN true Assert::assert('a', 'var')->toBool()->get();
toFloat 将任何类型(除了数组)转换为 float
值不能是数组
// RETURN 0.0 Assert::assert('a', 'var')->toFloat()->get(); // RETURN -15.2 Assert::assert('-15.2', 'var')->toFloat()->get(); // ---------- // EXCEPTION: var MUST NOT be array Assert::assert([], 'var')->toFloat()->get();
toInt 将任何类型(除了数组)转换为 int
值不能是数组
// RETURN 0 Assert::assert('a', 'var')->toInt()->get(); // RETURN -15 Assert::assert('-15.2', 'var')->toInt()->get(); // ---------- // EXCEPTION: var MUST NOT be array Assert::assert([], 'var')->toInt()->get();
toString 将任何类型(除了数组)转换为字符串
值不能是数组
// RETURN '' Assert::assert(false, 'var')->toString()->get(); // RETURN '-15' Assert::assert(-15, 'var')->toString()->get(); // ---------- // EXCEPTION: var MUST NOT be array Assert::assert([], 'var')->toString()->get();
测试
从控制台运行测试
make test