|
@@ 96-100 (lines=5) @@
|
| 93 |
|
} |
| 94 |
|
|
| 95 |
|
// Check iterable |
| 96 |
|
if ($superTypeName === BuiltInTypes::ITERABLE) { |
| 97 |
|
return $subTypeName === BuiltInTypes::ARRAY |
| 98 |
|
|| $subTypeName === \Traversable::class |
| 99 |
|
|| \is_subclass_of($subTypeName, \Traversable::class); |
| 100 |
|
} |
| 101 |
|
|
| 102 |
|
// Check callable |
| 103 |
|
if ($superTypeName === BuiltInTypes::CALLABLE) { |
|
@@ 103-107 (lines=5) @@
|
| 100 |
|
} |
| 101 |
|
|
| 102 |
|
// Check callable |
| 103 |
|
if ($superTypeName === BuiltInTypes::CALLABLE) { |
| 104 |
|
return $subTypeName === \Closure::class |
| 105 |
|
|| \method_exists($subTypeName, '__invoke') |
| 106 |
|
|| \is_subclass_of($subTypeName, \Closure::class); |
| 107 |
|
} |
| 108 |
|
|
| 109 |
|
// If the super type is built-in, check whether casting rules can succeed |
| 110 |
|
if (isset(self::$builtInTypes[$superTypeName])) { |