Current File : /var/www/vinorea/modules/psxdesign/vendor/sebastian/type/src/Type.php |
<?php declare(strict_types=1);
/*
* This file is part of sebastian/type.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\Type;
abstract class Type
{
public static function fromValue($value, bool $allowsNull): self
{
$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 '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);
}
}
abstract public function isAssignable(Type $other): bool;
abstract public function getReturnTypeDeclaration(): string;
abstract public function allowsNull(): bool;
}