| Methods | 
			
	
			
				
					
	public
					
					
				
			 | 
			
				__construct(string $className, ?Type $subtractedType = null, ?ClassReflection $classReflection = null)
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					static
					
				
			 | 
			
				resetCaches(): void
	
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getClassName(): string
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				hasProperty(string $propertyName): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getProperty(string $propertyName, ClassMemberAccessAnswerer $scope): ExtendedPropertyReflection
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getUnresolvedPropertyPrototype(
	string $propertyName,
	ClassMemberAccessAnswerer $scope,
): UnresolvedPropertyPrototypeReflection
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getPropertyWithoutTransformingStatic(string $propertyName, ClassMemberAccessAnswerer $scope): PropertyReflection
	
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getReferencedClasses(): array
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getObjectClassNames(): array
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getObjectClassReflections(): array
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				accepts(Type $type, bool $strictTypes): AcceptsResult
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isSuperTypeOf(Type $type): IsSuperTypeOfResult
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				equals(Type $type): bool
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				describe(VerbosityLevel $level): string
	
			 | 
		
			#
		 | 
	
	
			
				
					
	protected
					
					
				
			 | 
			
				describeAdditionalCacheKey(): string
	
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				toNumber(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				toAbsoluteNumber(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				toInteger(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				toFloat(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				toString(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				toArray(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				toArrayKey(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				toBoolean(): BooleanType
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isObject(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isEnum(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				canAccessProperties(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				canCallMethods(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				hasMethod(string $methodName): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getMethod(string $methodName, ClassMemberAccessAnswerer $scope): ExtendedMethodReflection
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getUnresolvedMethodPrototype(string $methodName, ClassMemberAccessAnswerer $scope): UnresolvedMethodPrototypeReflection
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				canAccessConstants(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				hasConstant(string $constantName): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getConstant(string $constantName): ClassConstantReflection
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getTemplateType(string $ancestorClassName, string $templateTypeName): Type
	
		Returns actual template type for a given object.
	 
	
	Returns actual template type for a given object. 
Example: 
@-template T
class Foo {} 
// $fooType is Foo
$t = $fooType->getTemplateType(Foo::class, 'T');
$t->isInteger(); // yes 
Returns ErrorType in case of a missing type. 
 
		Implements
		
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getConstantStrings(): array
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isIterable(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isIterableAtLeastOnce(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getArraySize(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getIterableKeyType(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getFirstIterableKeyType(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getLastIterableKeyType(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getIterableValueType(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getFirstIterableValueType(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getLastIterableValueType(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isNull(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isConstantValue(): TrinaryLogic
	
		Is Type of a known constant value? Includes literal strings, integers, floats, true, false, null, and array shapes.
	 
	
	Is Type of a known constant value? Includes literal strings, integers, floats, true, false, null, and array shapes. 
 
		Implements
		
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isConstantScalarValue(): TrinaryLogic
	
		Is Type of a known constant scalar value? Includes literal strings, integers, floats, true, false, and null.
	 
	
	Is Type of a known constant scalar value? Includes literal strings, integers, floats, true, false, and null. 
 
		Implements
		
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getConstantScalarTypes(): array
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getConstantScalarValues(): array
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isTrue(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isFalse(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isBoolean(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isFloat(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isInteger(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isString(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isNumericString(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isNonEmptyString(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isNonFalsyString(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isLiteralString(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isLowercaseString(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isClassString(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isUppercaseString(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getClassStringObjectType(): Type
	
		Returns object type Foo for class-string<Foo> and 'Foo' (if Foo is a valid class).
	 
	
	Returns object type Foo for class-string<Foo> and 'Foo' (if Foo is a valid class). 
 
		Implements
		
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getObjectTypeOrClassStringObjectType(): Type
	
		Returns object type Foo for class-string<Foo>, 'Foo' (if Foo is a valid class),
and object type Foo.
	 
	
	Returns object type Foo for class-string<Foo>, 'Foo' (if Foo is a valid class),
and object type Foo. 
 
		Implements
		
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isVoid(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isScalar(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				looseCompare(Type $type, PhpVersion $phpVersion): BooleanType
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isOffsetAccessible(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isOffsetAccessLegal(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				hasOffsetValueType(Type $offsetType): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getOffsetValueType(Type $offsetType): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				setOffsetValueType(?Type $offsetType, Type $valueType, bool $unionValues = true): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				setExistingOffsetValueType(Type $offsetType, Type $valueType): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				unsetOffset(Type $offsetType): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getEnumCases(): array
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isCallable(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getCallableParametersAcceptors(ClassMemberAccessAnswerer $scope): array
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isCloneable(): TrinaryLogic
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				isInstanceOf(string $className): TrinaryLogic
	
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				subtract(Type $type): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getTypeWithoutSubtractedType(): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				changeSubtractedType(?Type $subtractedType): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getSubtractedType(): ?Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				traverse(callable $cb): Type
	
		Traverses inner types
	 
	
	Traverses inner types 
Returns a new instance with all inner types mapped through $cb. Might
return the same instance if inner types did not change. 
 
		Overriden by
		
		Implements
		
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				traverseSimultaneously(Type $right, callable $cb): Type
	
		Traverses inner types while keeping the same context in another type.
	 
	
	Traverses inner types while keeping the same context in another type. 
 
		Overriden by
		
		Implements
		
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getNakedClassReflection(): ?ClassReflection
	
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getClassReflection(): ?ClassReflection
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getAncestorWithClassName(string $className): ?self
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				tryRemove(Type $typeToRemove): ?Type
	
		Return the difference with another type, or null if it cannot be represented.
	 
	
	Return the difference with another type, or null if it cannot be represented. 
 
		Overriden by
		
		Implements
		
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				getFiniteTypes(): array
	
		Returns a list of finite values.
	 
	
	Returns a list of finite values. 
Examples: 
- for bool: [true, false]
 
- for int<0, 3>: [0, 1, 2, 3]
 
- for enums: list of enum cases
 
- for scalars: the scalar itself
 
 
For infinite types it returns an empty array. 
 
		Implements
		
	 
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				exponentiate(Type $exponent): Type
	
			 | 
		
			#
		 | 
	
	
			
				
					
	public
					
					
				
			 | 
			
				toPhpDocNode(): TypeNode
	
			 | 
		
			#
		 |