|
@@ 70-74 (lines=5) @@
|
| 67 |
|
} |
| 68 |
|
|
| 69 |
|
// Check iterable |
| 70 |
|
if ($superTypeName === BuiltInTypes::ITERABLE) { |
| 71 |
|
return $subTypeName === BuiltInTypes::ARRAY |
| 72 |
|
|| $subTypeName === \Traversable::class |
| 73 |
|
|| \is_subclass_of($subTypeName, \Traversable::class); |
| 74 |
|
} |
| 75 |
|
|
| 76 |
|
// Check callable |
| 77 |
|
if ($superTypeName === BuiltInTypes::CALLABLE) { |
|
@@ 77-81 (lines=5) @@
|
| 74 |
|
} |
| 75 |
|
|
| 76 |
|
// Check callable |
| 77 |
|
if ($superTypeName === BuiltInTypes::CALLABLE) { |
| 78 |
|
return $subTypeName === \Closure::class |
| 79 |
|
|| \method_exists($subTypeName, '__invoke') |
| 80 |
|
|| \is_subclass_of($subTypeName, \Closure::class); |
| 81 |
|
} |
| 82 |
|
|
| 83 |
|
// If the super type is built-in, check whether casting rules can succeed |
| 84 |
|
if (isset(self::$builtInTypes[$superTypeName])) { |