@@ -56,16 +56,20 @@ discard block |
||
| 56 | 56 | public static function createLambda($closure, string $closureArgs, $default = null) |
| 57 | 57 | { |
| 58 | 58 | if ($closure === null) { |
| 59 | - if ($default === null) |
|
| 60 | - throw new \InvalidArgumentException(self::ERROR_CLOSURE_NULL); |
|
| 59 | + if ($default === null) { |
|
| 60 | + throw new \InvalidArgumentException(self::ERROR_CLOSURE_NULL); |
|
| 61 | + } |
|
| 61 | 62 | return $default; |
| 62 | 63 | } |
| 63 | - if ($closure instanceof \Closure) |
|
| 64 | - return $closure; |
|
| 65 | - if (is_string($closure) && ($function = self::createLambdaFromString($closure, $closureArgs))) |
|
| 66 | - return $function; |
|
| 67 | - if (is_callable($closure)) |
|
| 68 | - return $closure; |
|
| 64 | + if ($closure instanceof \Closure) { |
|
| 65 | + return $closure; |
|
| 66 | + } |
|
| 67 | + if (is_string($closure) && ($function = self::createLambdaFromString($closure, $closureArgs))) { |
|
| 68 | + return $function; |
|
| 69 | + } |
|
| 70 | + if (is_callable($closure)) { |
|
| 71 | + return $closure; |
|
| 72 | + } |
|
| 69 | 73 | throw new \InvalidArgumentException(self::ERROR_CLOSURE_NOT_CALLABLE); |
| 70 | 74 | } |
| 71 | 75 | |
@@ -83,8 +87,7 @@ discard block |
||
| 83 | 87 | if ($closure === null) { |
| 84 | 88 | $isReversed = false; |
| 85 | 89 | return $sortOrder === SORT_DESC ? Functions::$compareStrictReversed : Functions::$compareStrict; |
| 86 | - } |
|
| 87 | - elseif (is_int($closure)) { |
|
| 90 | + } elseif (is_int($closure)) { |
|
| 88 | 91 | switch ($closure) { |
| 89 | 92 | case SORT_REGULAR: |
| 90 | 93 | return Functions::$compareStrict; |
@@ -116,16 +119,19 @@ discard block |
||
| 116 | 119 | */ |
| 117 | 120 | public static function lambdaToSortFlagsAndOrder($closure, &$sortOrder) |
| 118 | 121 | { |
| 119 | - if ($closure === null) |
|
| 120 | - $closure = ''; |
|
| 121 | - if ($sortOrder !== SORT_ASC && $sortOrder !== SORT_DESC) |
|
| 122 | - $sortOrder = $sortOrder ? SORT_DESC : SORT_ASC; |
|
| 123 | - if (is_int($closure)) |
|
| 124 | - return $closure; |
|
| 125 | - elseif (is_string($closure) && isset(self::$compareFunctionToSortFlags[$closure])) |
|
| 126 | - return self::$compareFunctionToSortFlags[$closure]; |
|
| 127 | - else |
|
| 128 | - return null; |
|
| 122 | + if ($closure === null) { |
|
| 123 | + $closure = ''; |
|
| 124 | + } |
|
| 125 | + if ($sortOrder !== SORT_ASC && $sortOrder !== SORT_DESC) { |
|
| 126 | + $sortOrder = $sortOrder ? SORT_DESC : SORT_ASC; |
|
| 127 | + } |
|
| 128 | + if (is_int($closure)) { |
|
| 129 | + return $closure; |
|
| 130 | + } elseif (is_string($closure) && isset(self::$compareFunctionToSortFlags[$closure])) { |
|
| 131 | + return self::$compareFunctionToSortFlags[$closure]; |
|
| 132 | + } else { |
|
| 133 | + return null; |
|
| 134 | + } |
|
| 129 | 135 | } |
| 130 | 136 | |
| 131 | 137 | /** |
@@ -139,23 +145,25 @@ discard block |
||
| 139 | 145 | { |
| 140 | 146 | $posDollar = strpos($closure, '$'); |
| 141 | 147 | if ($posDollar !== false) { |
| 142 | - if (isset(self::$lambdaCache[$closure][$closureArgs])) |
|
| 143 | - return self::$lambdaCache[$closure][$closureArgs]; |
|
| 148 | + if (isset(self::$lambdaCache[$closure][$closureArgs])) { |
|
| 149 | + return self::$lambdaCache[$closure][$closureArgs]; |
|
| 150 | + } |
|
| 144 | 151 | $posArrow = strpos($closure, '==>', $posDollar); |
| 145 | 152 | if ($posArrow !== false) { |
| 146 | 153 | $args = trim(substr($closure, 0, $posArrow), "() \r\n\t"); |
| 147 | 154 | $code = substr($closure, $posArrow + 3); |
| 148 | - } |
|
| 149 | - else { |
|
| 155 | + } else { |
|
| 150 | 156 | $args = '$' . str_replace(',', '=null,$', $closureArgs) . '=null'; |
| 151 | 157 | $code = $closure; |
| 152 | 158 | } |
| 153 | 159 | $code = trim($code, " \r\n\t"); |
| 154 | - if (strlen($code) > 0 && $code[0] != '{') |
|
| 155 | - $code = "return {$code};"; |
|
| 160 | + if (strlen($code) > 0 && $code[0] != '{') { |
|
| 161 | + $code = "return {$code};"; |
|
| 162 | + } |
|
| 156 | 163 | $fun = eval("return function($args) { $code };"); |
| 157 | - if (!is_callable($fun)) |
|
| 158 | - throw new \InvalidArgumentException(self::ERROR_CANNOT_PARSE_LAMBDA); |
|
| 164 | + if (!is_callable($fun)) { |
|
| 165 | + throw new \InvalidArgumentException(self::ERROR_CANNOT_PARSE_LAMBDA); |
|
| 166 | + } |
|
| 159 | 167 | self::$lambdaCache[$closure][$closureArgs] = $fun; |
| 160 | 168 | return $fun; |
| 161 | 169 | } |