summaryrefslogtreecommitdiff
path: root/vendor/sebastian/type/src/Type.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sebastian/type/src/Type.php')
-rw-r--r--vendor/sebastian/type/src/Type.php101
1 files changed, 101 insertions, 0 deletions
diff --git a/vendor/sebastian/type/src/Type.php b/vendor/sebastian/type/src/Type.php
new file mode 100644
index 000000000..679223d96
--- /dev/null
+++ b/vendor/sebastian/type/src/Type.php
@@ -0,0 +1,101 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of sebastian/type.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Type;
+
+use function get_class;
+use function gettype;
+use function strtolower;
+
+abstract class Type
+{
+ public static function fromValue($value, bool $allowsNull): self
+ {
+ if ($value === false) {
+ return new FalseType;
+ }
+
+ $typeName = gettype($value);
+
+ if ($typeName === 'object') {
+ return new ObjectType(TypeName::fromQualifiedName(get_class($value)), $allowsNull);
+ }
+
+ $type = self::fromName($typeName, $allowsNull);
+
+ if ($type instanceof SimpleType) {
+ $type = new SimpleType($typeName, $allowsNull, $value);
+ }
+
+ return $type;
+ }
+
+ public static function fromName(string $typeName, bool $allowsNull): self
+ {
+ switch (strtolower($typeName)) {
+ case 'callable':
+ return new CallableType($allowsNull);
+
+ case 'false':
+ return new FalseType;
+
+ case 'iterable':
+ return new IterableType($allowsNull);
+
+ case 'null':
+ return new NullType;
+
+ case 'object':
+ return new GenericObjectType($allowsNull);
+
+ case 'unknown type':
+ return new UnknownType;
+
+ case 'void':
+ return new VoidType;
+
+ case 'array':
+ case 'bool':
+ case 'boolean':
+ case 'double':
+ case 'float':
+ case 'int':
+ case 'integer':
+ case 'real':
+ case 'resource':
+ case 'resource (closed)':
+ case 'string':
+ return new SimpleType($typeName, $allowsNull);
+
+ default:
+ return new ObjectType(TypeName::fromQualifiedName($typeName), $allowsNull);
+ }
+ }
+
+ public function asString(): string
+ {
+ return ($this->allowsNull() ? '?' : '') . $this->name();
+ }
+
+ /**
+ * @deprecated
+ *
+ * @codeCoverageIgnore
+ */
+ public function getReturnTypeDeclaration(): string
+ {
+ return ': ' . $this->asString();
+ }
+
+ abstract public function isAssignable(Type $other): bool;
+
+ abstract public function name(): string;
+
+ abstract public function allowsNull(): bool;
+}