1 | <?php |
||
17 | class Utils |
||
18 | { |
||
19 | const ERROR_CLOSURE_NULL = 'closure must not be null.'; |
||
20 | const ERROR_CLOSURE_NOT_CALLABLE = 'closure must be callable'; |
||
21 | const ERROR_CANNOT_PARSE_LAMBDA = 'Failed to parse closure as lambda.'; |
||
22 | |||
23 | /** Cache for createLambdaFromString function. Functions indexed by function code and function arguments as strings. @var array */ |
||
24 | private static $lambdaCache; |
||
25 | /** Map from comparison functions names to sort flags. Used in lambdaToSortFlagsAndOrder. @var array */ |
||
26 | private static $compareFunctionToSortFlags = [ |
||
27 | null => SORT_REGULAR, |
||
28 | 'strcmp' => SORT_STRING, |
||
29 | 'strcasecmp' => 10 /*SORT_STRING | SORT_FLAG_CASE*/, |
||
30 | 'strcoll' => SORT_LOCALE_STRING, |
||
31 | 'strnatcmp' => SORT_NATURAL, |
||
32 | 'strnatcasecmp' => 14 /*SORT_NATURAL | SORT_FLAG_CASE*/, |
||
33 | ]; |
||
34 | |||
35 | /** |
||
36 | * @codeCoverageIgnore |
||
37 | * @internal |
||
38 | */ |
||
39 | public static function init() |
||
46 | |||
47 | /** |
||
48 | * Convert string lambda to callable function. If callable is passed, return as is. |
||
49 | * @param callable|null $closure |
||
50 | * @param string $closureArgs |
||
51 | * @param \Closure|callable|null $default |
||
52 | * @throws \InvalidArgumentException Both closure and default are null. |
||
53 | * @throws \InvalidArgumentException Incorrect lambda syntax. |
||
54 | * @return callable|null |
||
55 | */ |
||
56 | public static function createLambda($closure, string $closureArgs, $default = null) |
||
71 | |||
72 | /** |
||
73 | * Convert string lambda or SORT_ flags to callable function. Sets isReversed to false if descending is reversed. |
||
74 | * @param callable|int|null $closure |
||
75 | * @param int $sortOrder |
||
76 | * @param bool $isReversed |
||
77 | * @return callable|string|null |
||
78 | * @throws \InvalidArgumentException Incorrect lambda syntax. |
||
79 | * @throws \InvalidArgumentException Incorrect SORT_ flags. |
||
80 | */ |
||
81 | public static function createComparer($closure, $sortOrder, &$isReversed) |
||
110 | |||
111 | /** |
||
112 | * Convert string lambda to SORT_ flags. Convert sortOrder from bool to SORT_ order. |
||
113 | * @param callable|string|int|null $closure |
||
114 | * @param int|bool $sortOrder |
||
115 | * @return callable|string|int|null |
||
116 | */ |
||
117 | public static function lambdaToSortFlagsAndOrder($closure, &$sortOrder) |
||
128 | |||
129 | /** |
||
130 | * Convert string lambda to callable function. |
||
131 | * @param string $closure |
||
132 | * @param string $closureArgs |
||
133 | * @throws \InvalidArgumentException Incorrect lambda syntax. |
||
134 | * @return string|null |
||
135 | */ |
||
136 | private static function createLambdaFromString(string $closure, string $closureArgs) |
||
164 | } |
||
165 |