Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like Assert often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use Assert, and based on these observations, apply Extract Interface, too.
| 1 | <?php  | 
            ||
| 175 | class Assert  | 
            ||
| 
                                                                                                    
                        
                         | 
                |||
| 176 | { | 
            ||
| 177 | 94 | public static function string($value, $message = '')  | 
            |
| 186 | |||
| 187 | 16 | public static function stringNotEmpty($value, $message = '')  | 
            |
| 192 | |||
| 193 | 17 | public static function integer($value, $message = '')  | 
            |
| 202 | |||
| 203 | 16 | public static function integerish($value, $message = '')  | 
            |
| 212 | |||
| 213 | 16 | public static function float($value, $message = '')  | 
            |
| 222 | |||
| 223 | 20 | public static function numeric($value, $message = '')  | 
            |
| 232 | |||
| 233 | 24 | public static function natural($value, $message = '')  | 
            |
| 242 | |||
| 243 | 16 | public static function boolean($value, $message = '')  | 
            |
| 252 | |||
| 253 | 23 | public static function scalar($value, $message = '')  | 
            |
| 262 | |||
| 263 | 23 | public static function object($value, $message = '')  | 
            |
| 272 | |||
| 273 | 16 | public static function resource($value, $type = null, $message = '')  | 
            |
| 290 | |||
| 291 | 20 | public static function isCallable($value, $message = '')  | 
            |
| 300 | |||
| 301 | 20 | public static function isArray($value, $message = '')  | 
            |
| 310 | |||
| 311 | 20 | public static function isTraversable($value, $message = '')  | 
            |
| 328 | |||
| 329 | 20 | View Code Duplication | public static function isArrayAccessible($value, $message = '')  | 
            
| 338 | |||
| 339 | 24 | View Code Duplication | public static function isCountable($value, $message = '')  | 
            
| 348 | |||
| 349 | 688 | View Code Duplication | public static function isIterable($value, $message = '')  | 
            
| 358 | |||
| 359 | 16 | public static function isInstanceOf($value, $class, $message = '')  | 
            |
| 369 | |||
| 370 | 16 | public static function notInstanceOf($value, $class, $message = '')  | 
            |
| 380 | |||
| 381 | 20 | public static function isInstanceOfAny($value, array $classes, $message = '')  | 
            |
| 395 | |||
| 396 | 23 | public static function isEmpty($value, $message = '')  | 
            |
| 405 | |||
| 406 | 23 | public static function notEmpty($value, $message = '')  | 
            |
| 415 | |||
| 416 | 11 | public static function null($value, $message = '')  | 
            |
| 425 | |||
| 426 | 11 | public static function notNull($value, $message = '')  | 
            |
| 434 | |||
| 435 | 15 | public static function true($value, $message = '')  | 
            |
| 444 | |||
| 445 | 19 | public static function false($value, $message = '')  | 
            |
| 454 | |||
| 455 | 47 | View Code Duplication | public static function ip($value, $message = '')  | 
            
| 456 |     { | 
            ||
| 457 | 47 |         if (false === filter_var($value, FILTER_VALIDATE_IP)) { | 
            |
| 458 | 19 | static::reportInvalidArgument(sprintf(  | 
            |
| 459 | 19 | $message ?: 'Expected a value to be an IP. Got: %s',  | 
            |
| 460 | 19 | static::valueToString($value)  | 
            |
| 461 | ));  | 
            ||
| 462 | }  | 
            ||
| 463 | 28 | }  | 
            |
| 464 | |||
| 465 | 47 | View Code Duplication | public static function ipv4($value, $message = '')  | 
            
| 466 |     { | 
            ||
| 467 | 47 |         if (false === filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { | 
            |
| 468 | 35 | static::reportInvalidArgument(sprintf(  | 
            |
| 469 | 35 | $message ?: 'Expected a value to be an IPv4. Got: %s',  | 
            |
| 470 | 35 | static::valueToString($value)  | 
            |
| 471 | ));  | 
            ||
| 472 | }  | 
            ||
| 473 | 12 | }  | 
            |
| 474 | |||
| 475 | 47 | View Code Duplication | public static function ipv6($value, $message = '')  | 
            
| 476 |     { | 
            ||
| 477 | 47 |         if (false === filter_var($value, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { | 
            |
| 478 | 31 | static::reportInvalidArgument(sprintf(  | 
            |
| 479 | 31 | $message ?: 'Expected a value to be an IPv6. Got %s',  | 
            |
| 480 | 31 | static::valueToString($value)  | 
            |
| 481 | ));  | 
            ||
| 482 | }  | 
            ||
| 483 | 16 | }  | 
            |
| 484 | |||
| 485 | 33 | public static function eq($value, $value2, $message = '')  | 
            |
| 486 |     { | 
            ||
| 487 | 33 |         if ($value2 != $value) { | 
            |
| 488 | 17 | static::reportInvalidArgument(sprintf(  | 
            |
| 489 | 17 | $message ?: 'Expected a value equal to %2$s. Got: %s',  | 
            |
| 490 | 17 | static::valueToString($value),  | 
            |
| 491 | 17 | static::valueToString($value2)  | 
            |
| 492 | ));  | 
            ||
| 493 | }  | 
            ||
| 494 | 16 | }  | 
            |
| 495 | |||
| 496 | 28 | public static function notEq($value, $value2, $message = '')  | 
            |
| 497 |     { | 
            ||
| 498 | 28 |         if ($value2 == $value) { | 
            |
| 499 | 16 | static::reportInvalidArgument(sprintf(  | 
            |
| 500 | 16 | $message ?: 'Expected a different value than %s.',  | 
            |
| 501 | 16 | static::valueToString($value2)  | 
            |
| 502 | ));  | 
            ||
| 503 | }  | 
            ||
| 504 | 12 | }  | 
            |
| 505 | |||
| 506 | 16 | public static function same($value, $value2, $message = '')  | 
            |
| 507 |     { | 
            ||
| 508 | 16 |         if ($value2 !== $value) { | 
            |
| 509 | 12 | static::reportInvalidArgument(sprintf(  | 
            |
| 510 | 12 | $message ?: 'Expected a value identical to %2$s. Got: %s',  | 
            |
| 511 | 12 | static::valueToString($value),  | 
            |
| 512 | 12 | static::valueToString($value2)  | 
            |
| 513 | ));  | 
            ||
| 514 | }  | 
            ||
| 515 | 4 | }  | 
            |
| 516 | |||
| 517 | 16 | public static function notSame($value, $value2, $message = '')  | 
            |
| 518 |     { | 
            ||
| 519 | 16 |         if ($value2 === $value) { | 
            |
| 520 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 521 | 4 | $message ?: 'Expected a value not identical to %s.',  | 
            |
| 522 | 4 | static::valueToString($value2)  | 
            |
| 523 | ));  | 
            ||
| 524 | }  | 
            ||
| 525 | 12 | }  | 
            |
| 526 | |||
| 527 | 8 | public static function greaterThan($value, $limit, $message = '')  | 
            |
| 528 |     { | 
            ||
| 529 | 8 |         if ($value <= $limit) { | 
            |
| 530 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 531 | 4 | $message ?: 'Expected a value greater than %2$s. Got: %s',  | 
            |
| 532 | 4 | static::valueToString($value),  | 
            |
| 533 | 4 | static::valueToString($limit)  | 
            |
| 534 | ));  | 
            ||
| 535 | }  | 
            ||
| 536 | 4 | }  | 
            |
| 537 | |||
| 538 | 12 | public static function greaterThanEq($value, $limit, $message = '')  | 
            |
| 548 | |||
| 549 | 8 | public static function lessThan($value, $limit, $message = '')  | 
            |
| 559 | |||
| 560 | 12 | public static function lessThanEq($value, $limit, $message = '')  | 
            |
| 570 | |||
| 571 | 16 | View Code Duplication | public static function range($value, $min, $max, $message = '')  | 
            
| 572 |     { | 
            ||
| 573 | 16 |         if ($value < $min || $value > $max) { | 
            |
| 574 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 575 | 8 | $message ?: 'Expected a value between %2$s and %3$s. Got: %s',  | 
            |
| 576 | 8 | static::valueToString($value),  | 
            |
| 577 | 8 | static::valueToString($min),  | 
            |
| 578 | 8 | static::valueToString($max)  | 
            |
| 579 | ));  | 
            ||
| 580 | }  | 
            ||
| 581 | 8 | }  | 
            |
| 582 | |||
| 583 | 8 | public static function oneOf($value, array $values, $message = '')  | 
            |
| 584 |     { | 
            ||
| 585 | 8 |         if (!in_array($value, $values, true)) { | 
            |
| 586 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 587 | 4 | $message ?: 'Expected one of: %2$s. Got: %s',  | 
            |
| 588 | 4 | static::valueToString($value),  | 
            |
| 589 | 4 |                 implode(', ', array_map(array('static', 'valueToString'), $values)) | 
            |
| 590 | ));  | 
            ||
| 591 | }  | 
            ||
| 592 | 4 | }  | 
            |
| 593 | |||
| 594 | 20 | View Code Duplication | public static function contains($value, $subString, $message = '')  | 
            
| 595 |     { | 
            ||
| 596 | 20 |         if (false === strpos($value, $subString)) { | 
            |
| 597 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 598 | 8 | $message ?: 'Expected a value to contain %2$s. Got: %s',  | 
            |
| 599 | 8 | static::valueToString($value),  | 
            |
| 600 | 8 | static::valueToString($subString)  | 
            |
| 601 | ));  | 
            ||
| 602 | }  | 
            ||
| 603 | 12 | }  | 
            |
| 604 | |||
| 605 | 20 | View Code Duplication | public static function notContains($value, $subString, $message = '')  | 
            
| 606 |     { | 
            ||
| 607 | 20 |         if (false !== strpos($value, $subString)) { | 
            |
| 608 | 12 | static::reportInvalidArgument(sprintf(  | 
            |
| 609 | 12 | $message ?: '%2$s was not expected to be contained in a value. Got: %s',  | 
            |
| 610 | 12 | static::valueToString($value),  | 
            |
| 611 | 12 | static::valueToString($subString)  | 
            |
| 612 | ));  | 
            ||
| 613 | }  | 
            ||
| 614 | 8 | }  | 
            |
| 615 | |||
| 616 | 40 | public static function notWhitespaceOnly($value, $message = '')  | 
            |
| 617 |     { | 
            ||
| 618 | 40 |         if (preg_match('/^\s*$/', $value)) { | 
            |
| 619 | 24 | static::reportInvalidArgument(sprintf(  | 
            |
| 620 | 24 | $message ?: 'Expected a non-whitespace string. Got: %s',  | 
            |
| 621 | 24 | static::valueToString($value)  | 
            |
| 622 | ));  | 
            ||
| 623 | }  | 
            ||
| 624 | 16 | }  | 
            |
| 625 | |||
| 626 | 12 | View Code Duplication | public static function startsWith($value, $prefix, $message = '')  | 
            
| 627 |     { | 
            ||
| 628 | 12 |         if (0 !== strpos($value, $prefix)) { | 
            |
| 629 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 630 | 8 | $message ?: 'Expected a value to start with %2$s. Got: %s',  | 
            |
| 631 | 8 | static::valueToString($value),  | 
            |
| 632 | 8 | static::valueToString($prefix)  | 
            |
| 633 | ));  | 
            ||
| 634 | }  | 
            ||
| 635 | 4 | }  | 
            |
| 636 | |||
| 637 | 12 | public static function startsWithLetter($value, $message = '')  | 
            |
| 638 |     { | 
            ||
| 639 | 12 | $valid = isset($value[0]);  | 
            |
| 640 | |||
| 641 | 12 |         if ($valid) { | 
            |
| 642 | 8 | $locale = setlocale(LC_CTYPE, 0);  | 
            |
| 643 | 8 | setlocale(LC_CTYPE, 'C');  | 
            |
| 644 | 8 | $valid = ctype_alpha($value[0]);  | 
            |
| 645 | 8 | setlocale(LC_CTYPE, $locale);  | 
            |
| 646 | }  | 
            ||
| 647 | |||
| 648 | 12 |         if (!$valid) { | 
            |
| 649 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 650 | 8 | $message ?: 'Expected a value to start with a letter. Got: %s',  | 
            |
| 651 | 8 | static::valueToString($value)  | 
            |
| 652 | ));  | 
            ||
| 653 | }  | 
            ||
| 654 | 4 | }  | 
            |
| 655 | |||
| 656 | 12 | View Code Duplication | public static function endsWith($value, $suffix, $message = '')  | 
            
| 666 | |||
| 667 | 12 | public static function regex($value, $pattern, $message = '')  | 
            |
| 676 | |||
| 677 | 12 | public static function notRegex($value, $pattern, $message = '')  | 
            |
| 678 |     { | 
            ||
| 679 | 12 |         if (preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE)) { | 
            |
| 680 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 681 | 4 | $message ?: 'The value %s matches the pattern %s (at offset %d).',  | 
            |
| 682 | 4 | static::valueToString($value),  | 
            |
| 683 | 4 | static::valueToString($pattern),  | 
            |
| 684 | 4 | $matches[0][1]  | 
            |
| 685 | ));  | 
            ||
| 686 | }  | 
            ||
| 687 | 8 | }  | 
            |
| 688 | |||
| 689 | 12 | View Code Duplication | public static function alpha($value, $message = '')  | 
            
| 690 |     { | 
            ||
| 691 | 12 | $locale = setlocale(LC_CTYPE, 0);  | 
            |
| 692 | 12 | setlocale(LC_CTYPE, 'C');  | 
            |
| 693 | 12 | $valid = !ctype_alpha($value);  | 
            |
| 694 | 12 | setlocale(LC_CTYPE, $locale);  | 
            |
| 695 | |||
| 696 | 12 |         if ($valid) { | 
            |
| 697 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 698 | 8 | $message ?: 'Expected a value to contain only letters. Got: %s',  | 
            |
| 699 | 8 | static::valueToString($value)  | 
            |
| 700 | ));  | 
            ||
| 701 | }  | 
            ||
| 702 | 4 | }  | 
            |
| 703 | |||
| 704 | 12 | View Code Duplication | public static function digits($value, $message = '')  | 
            
| 705 |     { | 
            ||
| 706 | 12 | $locale = setlocale(LC_CTYPE, 0);  | 
            |
| 707 | 12 | setlocale(LC_CTYPE, 'C');  | 
            |
| 708 | 12 | $valid = !ctype_digit($value);  | 
            |
| 709 | 12 | setlocale(LC_CTYPE, $locale);  | 
            |
| 710 | |||
| 711 | 12 |         if ($valid) { | 
            |
| 712 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 713 | 8 | $message ?: 'Expected a value to contain digits only. Got: %s',  | 
            |
| 714 | 8 | static::valueToString($value)  | 
            |
| 715 | ));  | 
            ||
| 716 | }  | 
            ||
| 717 | 4 | }  | 
            |
| 718 | |||
| 719 | 12 | View Code Duplication | public static function alnum($value, $message = '')  | 
            
| 720 |     { | 
            ||
| 721 | 12 | $locale = setlocale(LC_CTYPE, 0);  | 
            |
| 722 | 12 | setlocale(LC_CTYPE, 'C');  | 
            |
| 723 | 12 | $valid = !ctype_alnum($value);  | 
            |
| 724 | 12 | setlocale(LC_CTYPE, $locale);  | 
            |
| 725 | |||
| 726 | 12 |         if ($valid) { | 
            |
| 727 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 728 | 8 | $message ?: 'Expected a value to contain letters and digits only. Got: %s',  | 
            |
| 729 | 8 | static::valueToString($value)  | 
            |
| 730 | ));  | 
            ||
| 731 | }  | 
            ||
| 732 | 4 | }  | 
            |
| 733 | |||
| 734 | 16 | View Code Duplication | public static function lower($value, $message = '')  | 
            
| 735 |     { | 
            ||
| 736 | 16 | $locale = setlocale(LC_CTYPE, 0);  | 
            |
| 737 | 16 | setlocale(LC_CTYPE, 'C');  | 
            |
| 738 | 16 | $valid = !ctype_lower($value);  | 
            |
| 739 | 16 | setlocale(LC_CTYPE, $locale);  | 
            |
| 740 | |||
| 741 | 16 |         if ($valid) { | 
            |
| 742 | 12 | static::reportInvalidArgument(sprintf(  | 
            |
| 743 | 12 | $message ?: 'Expected a value to contain lowercase characters only. Got: %s',  | 
            |
| 744 | 12 | static::valueToString($value)  | 
            |
| 745 | ));  | 
            ||
| 746 | }  | 
            ||
| 747 | 4 | }  | 
            |
| 748 | |||
| 749 | 16 | View Code Duplication | public static function upper($value, $message = '')  | 
            
| 750 |     { | 
            ||
| 751 | 16 | $locale = setlocale(LC_CTYPE, 0);  | 
            |
| 752 | 16 | setlocale(LC_CTYPE, 'C');  | 
            |
| 753 | 16 | $valid = !ctype_upper($value);  | 
            |
| 754 | 16 | setlocale(LC_CTYPE, $locale);  | 
            |
| 755 | |||
| 756 | 16 |         if ($valid) { | 
            |
| 757 | 12 | static::reportInvalidArgument(sprintf(  | 
            |
| 758 | 12 | $message ?: 'Expected a value to contain uppercase characters only. Got: %s',  | 
            |
| 759 | 12 | static::valueToString($value)  | 
            |
| 760 | ));  | 
            ||
| 761 | }  | 
            ||
| 762 | 4 | }  | 
            |
| 763 | |||
| 764 | 24 | public static function length($value, $length, $message = '')  | 
            |
| 774 | |||
| 775 | 24 | public static function minLength($value, $min, $message = '')  | 
            |
| 776 |     { | 
            ||
| 777 | 24 |         if (static::strlen($value) < $min) { | 
            |
| 778 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 779 | 8 | $message ?: 'Expected a value to contain at least %2$s characters. Got: %s',  | 
            |
| 780 | 8 | static::valueToString($value),  | 
            |
| 781 | 8 | $min  | 
            |
| 782 | ));  | 
            ||
| 783 | }  | 
            ||
| 784 | 16 | }  | 
            |
| 785 | |||
| 786 | 24 | public static function maxLength($value, $max, $message = '')  | 
            |
| 787 |     { | 
            ||
| 788 | 24 |         if (static::strlen($value) > $max) { | 
            |
| 789 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 790 | 8 | $message ?: 'Expected a value to contain at most %2$s characters. Got: %s',  | 
            |
| 791 | 8 | static::valueToString($value),  | 
            |
| 792 | 8 | $max  | 
            |
| 793 | ));  | 
            ||
| 794 | }  | 
            ||
| 795 | 16 | }  | 
            |
| 796 | |||
| 797 | 40 | View Code Duplication | public static function lengthBetween($value, $min, $max, $message = '')  | 
            
| 798 |     { | 
            ||
| 799 | 40 | $length = static::strlen($value);  | 
            |
| 800 | |||
| 801 | 40 |         if ($length < $min || $length > $max) { | 
            |
| 802 | 16 | static::reportInvalidArgument(sprintf(  | 
            |
| 803 | 16 | $message ?: 'Expected a value to contain between %2$s and %3$s characters. Got: %s',  | 
            |
| 804 | 16 | static::valueToString($value),  | 
            |
| 805 | 16 | $min,  | 
            |
| 806 | 16 | $max  | 
            |
| 807 | ));  | 
            ||
| 808 | }  | 
            ||
| 809 | 24 | }  | 
            |
| 810 | |||
| 811 | 36 | public static function fileExists($value, $message = '')  | 
            |
| 812 |     { | 
            ||
| 813 | 36 | static::string($value);  | 
            |
| 814 | |||
| 815 | 36 |         if (!file_exists($value)) { | 
            |
| 816 | 12 | static::reportInvalidArgument(sprintf(  | 
            |
| 817 | 12 | $message ?: 'The file %s does not exist.',  | 
            |
| 818 | 12 | static::valueToString($value)  | 
            |
| 819 | ));  | 
            ||
| 820 | }  | 
            ||
| 821 | 24 | }  | 
            |
| 822 | |||
| 823 | 12 | View Code Duplication | public static function file($value, $message = '')  | 
            
| 824 |     { | 
            ||
| 825 | 12 | static::fileExists($value, $message);  | 
            |
| 826 | |||
| 827 | 8 |         if (!is_file($value)) { | 
            |
| 828 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 829 | 4 | $message ?: 'The path %s is not a file.',  | 
            |
| 830 | 4 | static::valueToString($value)  | 
            |
| 831 | ));  | 
            ||
| 832 | }  | 
            ||
| 833 | 4 | }  | 
            |
| 834 | |||
| 835 | 12 | View Code Duplication | public static function directory($value, $message = '')  | 
            
| 846 | |||
| 847 | public static function readable($value, $message = '')  | 
            ||
| 848 |     { | 
            ||
| 849 |         if (!is_readable($value)) { | 
            ||
| 850 | static::reportInvalidArgument(sprintf(  | 
            ||
| 851 | $message ?: 'The path %s is not readable.',  | 
            ||
| 852 | static::valueToString($value)  | 
            ||
| 853 | ));  | 
            ||
| 854 | }  | 
            ||
| 855 | }  | 
            ||
| 856 | |||
| 857 | public static function writable($value, $message = '')  | 
            ||
| 858 |     { | 
            ||
| 859 |         if (!is_writable($value)) { | 
            ||
| 860 | static::reportInvalidArgument(sprintf(  | 
            ||
| 861 | $message ?: 'The path %s is not writable.',  | 
            ||
| 862 | static::valueToString($value)  | 
            ||
| 863 | ));  | 
            ||
| 864 | }  | 
            ||
| 865 | }  | 
            ||
| 866 | |||
| 867 | 8 | public static function classExists($value, $message = '')  | 
            |
| 868 |     { | 
            ||
| 869 | 8 |         if (!class_exists($value)) { | 
            |
| 870 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 871 | 4 | $message ?: 'Expected an existing class name. Got: %s',  | 
            |
| 872 | 4 | static::valueToString($value)  | 
            |
| 873 | ));  | 
            ||
| 874 | }  | 
            ||
| 875 | 4 | }  | 
            |
| 876 | |||
| 877 | 8 | public static function subclassOf($value, $class, $message = '')  | 
            |
| 878 |     { | 
            ||
| 879 | 8 |         if (!is_subclass_of($value, $class)) { | 
            |
| 880 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 881 | 4 | $message ?: 'Expected a sub-class of %2$s. Got: %s',  | 
            |
| 882 | 4 | static::valueToString($value),  | 
            |
| 883 | 4 | static::valueToString($class)  | 
            |
| 884 | ));  | 
            ||
| 885 | }  | 
            ||
| 886 | 4 | }  | 
            |
| 887 | |||
| 888 | 8 | View Code Duplication | public static function implementsInterface($value, $interface, $message = '')  | 
            
| 889 |     { | 
            ||
| 890 | 8 |         if (!in_array($interface, class_implements($value))) { | 
            |
| 891 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 892 | 4 | $message ?: 'Expected an implementation of %2$s. Got: %s',  | 
            |
| 893 | 4 | static::valueToString($value),  | 
            |
| 894 | 4 | static::valueToString($interface)  | 
            |
| 895 | ));  | 
            ||
| 896 | }  | 
            ||
| 897 | 4 | }  | 
            |
| 898 | |||
| 899 | 12 | View Code Duplication | public static function propertyExists($classOrObject, $property, $message = '')  | 
            
| 900 |     { | 
            ||
| 901 | 12 |         if (!property_exists($classOrObject, $property)) { | 
            |
| 902 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 903 | 4 | $message ?: 'Expected the property %s to exist.',  | 
            |
| 904 | 4 | static::valueToString($property)  | 
            |
| 905 | ));  | 
            ||
| 906 | }  | 
            ||
| 907 | 8 | }  | 
            |
| 908 | |||
| 909 | 12 | View Code Duplication | public static function propertyNotExists($classOrObject, $property, $message = '')  | 
            
| 910 |     { | 
            ||
| 911 | 12 |         if (property_exists($classOrObject, $property)) { | 
            |
| 912 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 913 | 8 | $message ?: 'Expected the property %s to not exist.',  | 
            |
| 914 | 8 | static::valueToString($property)  | 
            |
| 915 | ));  | 
            ||
| 916 | }  | 
            ||
| 917 | 4 | }  | 
            |
| 918 | |||
| 919 | 27 | View Code Duplication | public static function methodExists($classOrObject, $method, $message = '')  | 
            
| 920 |     { | 
            ||
| 921 | 27 |         if (!method_exists($classOrObject, $method)) { | 
            |
| 922 | 19 | static::reportInvalidArgument(sprintf(  | 
            |
| 923 | 19 | $message ?: 'Expected the method %s to exist.',  | 
            |
| 924 | 19 | static::valueToString($method)  | 
            |
| 925 | ));  | 
            ||
| 926 | }  | 
            ||
| 927 | 8 | }  | 
            |
| 928 | |||
| 929 | 27 | View Code Duplication | public static function methodNotExists($classOrObject, $method, $message = '')  | 
            
| 938 | |||
| 939 | 12 | View Code Duplication | public static function keyExists($array, $key, $message = '')  | 
            
| 940 |     { | 
            ||
| 941 | 12 |         if (!(isset($array[$key]) || array_key_exists($key, $array))) { | 
            |
| 942 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 943 | 4 | $message ?: 'Expected the key %s to exist.',  | 
            |
| 944 | 4 | static::valueToString($key)  | 
            |
| 945 | ));  | 
            ||
| 946 | }  | 
            ||
| 947 | 8 | }  | 
            |
| 948 | |||
| 949 | 12 | View Code Duplication | public static function keyNotExists($array, $key, $message = '')  | 
            
| 950 |     { | 
            ||
| 951 | 12 |         if (isset($array[$key]) || array_key_exists($key, $array)) { | 
            |
| 952 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 953 | 8 | $message ?: 'Expected the key %s to not exist.',  | 
            |
| 954 | 8 | static::valueToString($key)  | 
            |
| 955 | ));  | 
            ||
| 956 | }  | 
            ||
| 957 | 4 | }  | 
            |
| 958 | |||
| 959 | 8 | public static function count($array, $number, $message = '')  | 
            |
| 967 | |||
| 968 | 12 | View Code Duplication | public static function minCount($array, $min, $message = '')  | 
            
| 969 |     { | 
            ||
| 970 | 12 |         if (count($array) < $min) { | 
            |
| 971 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 972 | 4 | $message ?: 'Expected an array to contain at least %2$d elements. Got: %d',  | 
            |
| 973 | 4 | count($array),  | 
            |
| 974 | 4 | $min  | 
            |
| 975 | ));  | 
            ||
| 976 | }  | 
            ||
| 977 | 8 | }  | 
            |
| 978 | |||
| 979 | 12 | View Code Duplication | public static function maxCount($array, $max, $message = '')  | 
            
| 980 |     { | 
            ||
| 981 | 12 |         if (count($array) > $max) { | 
            |
| 982 | 4 | static::reportInvalidArgument(sprintf(  | 
            |
| 983 | 4 | $message ?: 'Expected an array to contain at most %2$d elements. Got: %d',  | 
            |
| 984 | 4 | count($array),  | 
            |
| 985 | 4 | $max  | 
            |
| 986 | ));  | 
            ||
| 987 | }  | 
            ||
| 988 | 8 | }  | 
            |
| 989 | |||
| 990 | 12 | public static function countBetween($array, $min, $max, $message = '')  | 
            |
| 991 |     { | 
            ||
| 992 | 12 | $count = count($array);  | 
            |
| 993 | |||
| 994 | 12 |         if ($count < $min || $count > $max) { | 
            |
| 995 | 8 | static::reportInvalidArgument(sprintf(  | 
            |
| 996 | 8 | $message ?: 'Expected an array to contain between %2$d and %3$d elements. Got: %d',  | 
            |
| 997 | 8 | $count,  | 
            |
| 998 | 8 | $min,  | 
            |
| 999 | 8 | $max  | 
            |
| 1000 | ));  | 
            ||
| 1001 | }  | 
            ||
| 1002 | 4 | }  | 
            |
| 1003 | |||
| 1004 | 48 | public static function uuid($value, $message = '')  | 
            |
| 1005 |     { | 
            ||
| 1006 | 48 |         $value = str_replace(array('urn:', 'uuid:', '{', '}'), '', $value); | 
            |
| 1021 | |||
| 1022 | 24 | public static function throws(Closure $expression, $class = 'Exception', $message = '')  | 
            |
| 1048 | |||
| 1049 | 1091 | public static function __callStatic($name, $arguments)  | 
            |
| 1077 | |||
| 1078 | 526 | protected static function valueToString($value)  | 
            |
| 1114 | |||
| 1115 | 169 | protected static function typeToString($value)  | 
            |
| 1119 | |||
| 1120 | 124 | protected static function strlen($value)  | 
            |
| 1132 | |||
| 1133 | 710 | protected static function reportInvalidArgument($message)  | 
            |
| 1137 | |||
| 1138 | private function __construct()  | 
            ||
| 1141 | }  | 
            ||
| 1142 |