项目作者: ko-ko-ko

项目描述 :
Fast flexible php assert
高级语言: PHP
项目地址: git://github.com/ko-ko-ko/php-assert.git
创建时间: 2015-04-29T08:34:15Z
项目社区:https://github.com/ko-ko-ko/php-assert

开源协议:MIT License

下载


php-assert

Yet another validator, WHY??

It’s very fast and designed to be used in any method

There are many other cool asserts, but for their usability you must pay by time & memory of execution.
This assert gives you very simple and fast API.

Installation

The preferred way to install this extension is through composer.

  1. php composer.phar require --prefer-dist ko-ko-ko/assert "~1.1.0"

or add line to require section of composer.json

  1. "ko-ko-ko/assert": "~1.1.0"

Usage

  1. use KoKoKo\assert\Assert;
  2. Assert::assert($var, 'var')->notEmpty()->string();
  3. // It's the same as
  4. if (empty($var)) {
  5. throw new \InvalidArgumentException('Param $var must be not empty');
  6. }
  7. if (!is_string($var)) {
  8. throw new \InvalidArgumentException('Param $var must be string');
  9. }

BASIC API

assert($value, $name)

Build validation object

  • $value checking value. MUST be: array, bool, float, int, null, string
  • $name name of variable, used in exception message. MUST be string
  1. // OK
  2. Assert::assert('', 'var')->isEmpty();
  3. Assert::assert(5, 'var', '\LogicException');
  4. // EXCEPTION: var MUST NOT be an object
  5. Assert::assert(new stdClass(), 'var');

VALIDATION API

General asserts

isEmpty Check if value empty

  • Antipode: notEmpty
  1. // OK
  2. Assert::assert('', 'var')->isEmpty();
  3. Assert::assert('5', 'var')->notEmpty();
  4. // EXCEPTION
  5. Assert::assert('5', 'var')->isEmpty();
  6. Assert::assert([], 'var')->notEmpty();

isArray Check if value is array

  1. // OK
  2. Assert::assert([], 'var')->isArray();
  3. // EXCEPTION
  4. Assert::assert('5', 'var')->isArray();

bool Check if value is bool

  1. // OK
  2. Assert::assert(false, 'var')->bool();
  3. // EXCEPTION
  4. Assert::assert('5', 'var')->bool();

float Check if value is float

  1. // OK
  2. Assert::assert(15.2, 'var')->float();
  3. // EXCEPTION
  4. Assert::assert('15.2', 'var')->float();
  5. Assert::assert([], 'var')->float();

int Check if value is int

  1. // OK
  2. Assert::assert(15, 'var')->int();
  3. // EXCEPTION
  4. Assert::assert(15.2, 'var')->int();
  5. Assert::assert([], 'var')->int();

numeric Check if value is numeric

  1. // OK
  2. Assert::assert(15, 'var')->numeric();
  3. // EXCEPTION
  4. Assert::assert('*', 'var')->numeric();

isNull Check if value is null

  • Antipode: notNull
  1. // OK
  2. Assert::assert(null, 'var')->isNull();
  3. Assert::assert('a', 'var')->notNull();
  4. // EXCEPTION
  5. Assert::assert('a', 'var')->isNull();
  6. Assert::assert(null, 'var')->notNull();

string Check if value is string

  1. // OK
  2. Assert::assert('5', 'var')->string();
  3. // EXCEPTION
  4. Assert::assert([], 'var')->string();

resource Check if value is resource

  1. // OK
  2. Assert::assert(tmpfile(), 'var')->resource();
  3. // EXCEPTION
  4. Assert::assert(5, 'var')->resource();

inArray($range) Check if value is in array $range

Arguments:

  • $range MUST be array
  1. // OK
  2. Assert::assert('a', 'var')->inArray(['a', 'b']);
  3. // EXCEPTION
  4. Assert::assert('c', 'var')->inArray(['a', 'b']);
  5. // ----------
  6. // EXCEPTION: $range MUST be array
  7. Assert::assert(['a'], 'var')->inArray('a');

isSame($anotherValue) Check if value is same as $anotherValue

  • Antipode: notSame

Arguments:

  • $anotherValue MUST be not object
  1. // OK
  2. Assert::assert('a', 'var')->isSame('a');
  3. // EXCEPTION
  4. Assert::assert('a', 'var')->isSame('b');
  5. // ----------
  6. // EXCEPTION: $anotherValue MUST be not object
  7. Assert::assert('a', 'var')->isSame(new \stdClass());

notSame($anotherValue) Check if value is not same as $anotherValue

  • Antipode: isSame

Arguments:

  • $anotherValue MUST be not object
  1. // OK
  2. Assert::assert('a', 'var')->notSame('b');
  3. // EXCEPTION
  4. Assert::assert('a', 'var')->notSame('a');
  5. // ----------
  6. // EXCEPTION: $anotherValue MUST be not object
  7. Assert::assert('a', 'var')->notSame(new \stdClass());

String asserts

All string asserts run previously:

  • string

digit Check if value contains only digits

  1. // OK
  2. Assert::assert('5', 'var')->digit();
  3. // EXCEPTION
  4. Assert::assert('c', 'var')->digit();
  5. // ----------
  6. // EXCEPTION: var MUST be string
  7. Assert::assert(5, 'var')->digit();

match($pattern) Check if value match RegExp pattern

Arguments:

  • $pattern MUST be correct RegExp pattern
  1. // OK
  2. Assert::assert('a', 'var')->match('/a/');
  3. // EXCEPTION
  4. Assert::assert('b', 'var')->match('/a/');
  5. // ----------
  6. // EXCEPTION: pattern MUST be not empty
  7. Assert::assert('a', 'var')->match('');
  8. // EXCEPTION: var MUST be string
  9. Assert::assert(5, 'var')->match('/a/');
  10. // EXCEPTION: pattern MUST be correct RegExp
  11. Assert::assert('a', 'var')->match('/a');

glob($pattern) Check if value match glob pattern

  1. // OK
  2. Assert::assert('aa', 'var')->glob('a*');
  3. // EXCEPTION
  4. Assert::assert('bb', 'var')->glob('a*');
  5. // ----------
  6. // EXCEPTION: pattern MUST be not empty
  7. Assert::assert('a', 'var')->glob('');
  8. // EXCEPTION: pattern MUST be string
  9. Assert::assert('a', 'var')->glob(false);
  10. // EXCEPTION: var MUST be string
  11. Assert::assert(5, 'var')->glob('/a/');

length($length) Check if value has length exactly $length

Arguments:

  • $length MUST be integer >= 0
  1. // OK
  2. Assert::assert('aa', 'var')->length(2);
  3. // EXCEPTION
  4. Assert::assert('bb', 'var')->length(5);
  5. // ----------
  6. // EXCEPTION: length MUST be int
  7. Assert::assert('a', 'var')->length(null);
  8. // EXCEPTION: length MUST be more >= 0
  9. Assert::assert('a', 'var')->length(-2);
  10. // EXCEPTION: var MUST be string
  11. Assert::assert(5, 'var')->length(1);

lengthLess($length) Check if value has length less than $length

  • Antipode: lengthMore

Arguments:

  • $length MUST be integer > 0
  1. // OK
  2. Assert::assert('aa', 'var')->lengthLess(5);
  3. Assert::assert('bb', 'var')->lengthMore(1);
  4. // EXCEPTION
  5. Assert::assert('bb', 'var')->lengthLess(1);
  6. Assert::assert('aa', 'var')->lengthMore(5);
  7. // ----------
  8. // EXCEPTION: length MUST be int
  9. Assert::assert('a', 'var')->lengthLess(null);
  10. Assert::assert('a', 'var')->lengthMore(null);
  11. // EXCEPTION: length MUST be more >= 0
  12. Assert::assert('a', 'var')->lengthLess(-2);
  13. Assert::assert('a', 'var')->lengthMore(-2);
  14. // EXCEPTION: var MUST be string
  15. Assert::assert(5, 'var')->lengthLess(1);
  16. Assert::assert([], 'var')->lengthMore(1);

lengthBetween($from, $to) Check that value length is $from <= $value <= $to

Arguments:

  • $from MUST be integer >= 0
  • $to MUST be integer >= 0
  • $from MUST less than $to
  1. // OK
  2. Assert::assert('aa', 'var')->lengthBetween(1, 5);
  3. // EXCEPTION
  4. Assert::assert('bb', 'var')->lengthBetween(3, 10);
  5. // ----------
  6. // EXCEPTION: form MUST be int
  7. Assert::assert('a', 'var')->lengthBetween(null, 5);
  8. // EXCEPTION: to MUST be int
  9. Assert::assert('a', 'var')->lengthBetween(1, []);
  10. // EXCEPTION: form MUST be more >= 0
  11. Assert::assert('a', 'var')->lengthBetween(-2, 5);
  12. // EXCEPTION: form MUST be more than to
  13. Assert::assert('a', 'var')->lengthBetween(5, 1);
  14. // EXCEPTION: var MUST be string
  15. Assert::assert(5, 'var')->lengthBetween(1);

Number asserts (int or float)

All number MUST be int or float

positive Check if value is positive (not 0)

  • Antipode: negative Check if value is negative (not 0)
  1. // OK
  2. Assert::assert(1, 'var')->positive();
  3. Assert::assert(-5, 'var')->negative();
  4. // EXCEPTION
  5. Assert::assert(-1, 'var')->positive();
  6. Assert::assert(0, 'var')->positive();
  7. Assert::assert(10, 'var')->negative();
  8. Assert::assert(0, 'var')->negative();
  9. // ----------
  10. // EXCEPTION: var MUST be int or float
  11. Assert::assert('A', 'var')->positive();
  12. Assert::assert([], 'var')->negative();

less($number) Check if value is $value <= $number

  • Similar: lessStrict Check that value is $value < $number
  • Antipode: more Check that value is $value >= $number
  • Antipode: moreStrict Check that value is $value > $number

Arguments:

  • $number MUST be integer or float
  1. // OK
  2. Assert::assert(1, 'var')->less(2);
  3. Assert::assert(10, 'var')->more(5);
  4. // EXCEPTION
  5. Assert::assert(10, 'var')->less(5);
  6. Assert::assert(1, 'var')->more(2);
  7. // ----------
  8. // EXCEPTION: length MUST be int or float
  9. Assert::assert(1, 'var')->less(null);
  10. Assert::assert(1, 'var')->more(null);
  11. // EXCEPTION: var MUST be int or float
  12. Assert::assert('A', 'var')->less(1);
  13. Assert::assert([], 'var')->more(1);

between($from, $to) Check that value is $from <= $value <= $to

  • Similar: betweenStrict Check that value is $from < $value < $to

Arguments:

  • $from MUST be int or float
  • $to MUST be int or float
  • $from MUST less than $to
  1. // OK
  2. Assert::assert(2, 'var')->between(1, 5);
  3. // EXCEPTION
  4. Assert::assert(2.5, 'var')->between(3, 10);
  5. // ----------
  6. // EXCEPTION: form MUST be int
  7. Assert::assert(2, 'var')->between(null, 5);
  8. // EXCEPTION: to MUST be int
  9. Assert::assert(2, 'var')->between(1, []);
  10. // EXCEPTION: form MUST be more than to
  11. Assert::assert(2, 'var')->between(5, 1);
  12. // EXCEPTION: var MUST be int or float
  13. Assert::assert('A', 'var')->between(1);

Array asserts

hasKey($key) Check if array key exists

Arguments:

  • $key MUST be string or int
  1. // OK
  2. Assert::assert(['a' => 'b', 'c' => 'd'], 'data')->hasKey('a');
  3. // EXCEPTION
  4. Assert::assert(['a' => 'b', 'c' => 'd'], 'data')->hasKey('e');
  5. // ----------
  6. // EXCEPTION: data MUST be an array
  7. Assert::assert('notArray', 'data')->hasKey(1);
  8. // EXCEPTION: key MUST be string or int
  9. Assert::assert(['a' => 'b', 'c' => 'd'], 'data')->hasKey(null);

count($count) Check if array elements count is same as $count

Arguments:

  • $count MUST be int and greater than 0
  1. // OK
  2. Assert::assert(['a', 'b', 'c'], 'data')->count(3);
  3. // EXCEPTION
  4. Assert::assert(['a', 'c', 'd'], 'data')->count(1);
  5. // ----------
  6. // EXCEPTION: data MUST be an array
  7. Assert::assert('notArray', 'data')->hasKey(1);
  8. // EXCEPTION: count MUST be int
  9. Assert::assert(['a', 'c', 'd'], 'data')->count(null);
  10. // EXCEPTION: count MUST be greater than 0
  11. Assert::assert(['a', 'c', 'd'], 'data')->count(-5);

LOOP ASSERTS API

forList Run callable function for each element in list

  1. // OK
  2. $data = [1, 2, 3, 4, 5];
  3. Assert::assert($data, 'data')->forList(
  4. function (Assert $assert) {
  5. $assert->int()->positive();
  6. }
  7. );
  8. // ----------
  9. // EXCEPTION: data MUST be array
  10. Assert::assert('some data', 'data')->forList(
  11. function (Assert $assert) {}
  12. );
  13. // EXCEPTION: $data: key 'a' MUST be int
  14. Assert::assert(['a' => 'b'], 'data')->forList(
  15. function (Assert $assert) {}
  16. );

forMap Run callable function for each element in map

Attention: arrays like ['1' => 'a', '2' => 'b'] php will convert to [1 => 'a', 2 => 'b']

  1. // OK
  2. $data = ['A' => 'A1', 'B' => 'B1', 'C' => 'C1'];
  3. Assert::assert($data, 'data')->forMap(
  4. function (Assert $keyAssert, Assert $valueAssert) {
  5. $keyAssert->lengthMore(1);
  6. $valueAssert->lengthMore(1);
  7. }
  8. );
  9. // ----------
  10. // EXCEPTION: data MUST be array
  11. Assert::assert('some data', 'data')->forMap(
  12. function (Assert $keyAssert, Assert $valueAssert) {}
  13. );

CAST API

get Returns value as is

  1. // RETURN 'a'
  2. Assert::assert('a', 'var')->get();

toBool Converts any type to bool

  1. // RETURN true
  2. Assert::assert('a', 'var')->toBool()->get();

toFloat Converts any type (except array) to float

Value MUST NOT be array

  1. // RETURN 0.0
  2. Assert::assert('a', 'var')->toFloat()->get();
  3. // RETURN -15.2
  4. Assert::assert('-15.2', 'var')->toFloat()->get();
  5. // ----------
  6. // EXCEPTION: var MUST NOT be array
  7. Assert::assert([], 'var')->toFloat()->get();

toInt Converts any type (except array) to int

Value MUST NOT be array

  1. // RETURN 0
  2. Assert::assert('a', 'var')->toInt()->get();
  3. // RETURN -15
  4. Assert::assert('-15.2', 'var')->toInt()->get();
  5. // ----------
  6. // EXCEPTION: var MUST NOT be array
  7. Assert::assert([], 'var')->toInt()->get();

toString Converts any type (except array) to string

Value MUST NOT be array

  1. // RETURN ''
  2. Assert::assert(false, 'var')->toString()->get();
  3. // RETURN '-15'
  4. Assert::assert(-15, 'var')->toString()->get();
  5. // ----------
  6. // EXCEPTION: var MUST NOT be array
  7. Assert::assert([], 'var')->toString()->get();

Testing

Run tests from console

  1. make test