Skip to content

Commit 46663bb

Browse files
committed
ComponentReflection::convertType() supports true & false
1 parent 68783c1 commit 46663bb

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

src/Application/UI/ComponentReflection.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ public static function combineArgs(\ReflectionFunctionAbstract $method, array $a
197197
*/
198198
public static function convertType(&$val, string $types): bool
199199
{
200-
$scalars = ['string' => 1, 'int' => 1, 'float' => 1, 'bool' => 1, 'boolean' => 1, 'double' => 1, 'integer' => 1];
200+
$scalars = ['string' => 1, 'int' => 1, 'float' => 1, 'bool' => 1, 'true' => 1, 'false' => 1, 'boolean' => 1, 'double' => 1, 'integer' => 1];
201201
$testable = ['iterable' => 1, 'object' => 1, 'array' => 1, 'null' => 1];
202202

203203
foreach (explode('|', $types) as $type) {
@@ -238,7 +238,8 @@ private static function castScalar(&$val, string $type): bool
238238
}
239239

240240
$orig = $tmp;
241-
settype($tmp, $type);
241+
$spec = ['true' => true, 'false' => false];
242+
isset($spec[$type]) ? $tmp = $spec[$type] : settype($tmp, $type);
242243
if ($orig !== ($tmp === false ? '0' : (string) $tmp)) {
243244
return false; // data-loss occurs
244245
}

tests/UI/ComponentReflection.convertType.phpt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,38 @@ testIt('stdClass', 1);
244244
testIt('stdClass', 1.0);
245245
testIt('stdClass', 1.2);
246246

247+
testIt('true', null);
248+
testIt('true', []);
249+
testIt('true', $obj);
250+
testIt('true', '');
251+
testIt('true', 'a');
252+
testIt('true', '1', true);
253+
testIt('true', '1.0');
254+
testIt('true', '1.1');
255+
testIt('true', '1a');
256+
testIt('true', true, true);
257+
testIt('true', false);
258+
testIt('true', 0);
259+
testIt('true', 1, true);
260+
testIt('true', 1.0, true);
261+
testIt('true', 1.2);
262+
263+
testIt('false', null);
264+
testIt('false', []);
265+
testIt('false', $obj);
266+
testIt('false', '');
267+
testIt('false', 'a');
268+
testIt('false', '1');
269+
testIt('false', '1.0');
270+
testIt('false', '1.1');
271+
testIt('false', '1a');
272+
testIt('false', true);
273+
testIt('false', false, false);
274+
testIt('false', 0, false);
275+
testIt('false', 1);
276+
testIt('false', 1.0);
277+
testIt('false', 1.2);
278+
247279
testIt('Closure', $var = function () {}, $var);
248280

249281

0 commit comments

Comments
 (0)