| 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
|
hasInstanceProperty(string $propertyName): TrinaryLogic
|
#
|
public
|
getInstanceProperty(string $propertyName, ClassMemberAccessAnswerer $scope): ExtendedPropertyReflection
|
#
|
public
|
getUnresolvedInstancePropertyPrototype(
string $propertyName,
ClassMemberAccessAnswerer $scope,
): UnresolvedPropertyPrototypeReflection
Unlike getInstanceProperty(), this defers template type resolution.
Use getInstanceProperty() in most rule implementations.
Unlike getInstanceProperty(), this defers template type resolution.
Use getInstanceProperty() in most rule implementations.
Overridden by
Implements
|
#
|
public
|
hasStaticProperty(string $propertyName): TrinaryLogic
|
#
|
public
|
getStaticProperty(string $propertyName, ClassMemberAccessAnswerer $scope): ExtendedPropertyReflection
|
#
|
public
|
getUnresolvedStaticPropertyPrototype(
string $propertyName,
ClassMemberAccessAnswerer $scope,
): UnresolvedPropertyPrototypeReflection
|
#
|
public
|
getReferencedClasses(): array
Returns all class names referenced anywhere in this type, recursively
(including generic arguments, callable signatures, etc.).
Returns all class names referenced anywhere in this type, recursively
(including generic arguments, callable signatures, etc.).
Overridden by
Implements
|
#
|
public
|
getObjectClassNames(): array
Returns class names of the object types this type directly represents.
Unlike getReferencedClasses(), excludes classes in generic arguments, etc.
Returns class names of the object types this type directly represents.
Unlike getReferencedClasses(), excludes classes in generic arguments, etc.
Implements
|
#
|
public
|
getObjectClassReflections(): array
|
#
|
public
|
accepts(Type $type, bool $strictTypes): AcceptsResult
Unlike isSuperTypeOf(), accepts() takes into account PHP's implicit type coercion.
With $strictTypes = false, int is accepted by float, and Stringable objects are
accepted by string.
Unlike isSuperTypeOf(), accepts() takes into account PHP's implicit type coercion.
With $strictTypes = false, int is accepted by float, and Stringable objects are
accepted by string.
Overridden by
Implements
|
#
|
public
|
isSuperTypeOf(Type $type): IsSuperTypeOfResult
"Does every value of $type belong to $this type?" Preferable to instanceof checks because it correctly handles
union types, intersection types, and all other composite types.
"Does every value of $type belong to $this type?" Preferable to instanceof checks because it correctly handles
union types, intersection types, and all other composite types.
Overridden by
Implements
|
#
|
public
|
equals(Type $type): bool
|
#
|
public
|
describe(VerbosityLevel $level): string
|
#
|
protected
|
describeAdditionalCacheKey(): string
|
#
|
public
|
toNumber(): Type
Models numeric coercion for arithmetic operators.
Models numeric coercion for arithmetic operators.
Implements
|
#
|
public
|
toBitwiseNotType(): Type
Models the bitwise-not (~$x) operator. Returns ErrorType for types where ~ is undefined.
Models the bitwise-not (~$x) operator. Returns ErrorType for types where ~ is undefined.
Implements
|
#
|
public
|
toGetClassResultType(): Type
Models get_class($x)'s return type per leaf: definite objects yield
their class-string projection, definite non-objects yield false,
and possibly-objects yield the union of both.
Models get_class($x)'s return type per leaf: definite objects yield
their class-string projection, definite non-objects yield false,
and possibly-objects yield the union of both.
Implements
|
#
|
public
|
toClassConstantType(ReflectionProvider $reflectionProvider): Type
Models the type of $x::class. For known final classes the literal
class name is returned; for everything else an
IntersectionType[ClassString<X>, AccessoryLiteralStringType].
NullType passes through (mirrors PHP's nullsafe ::class semantics).
ReflectionProvider is needed for the final-class lookup.
Models the type of $x::class. For known final classes the literal
class name is returned; for everything else an
IntersectionType[ClassString<X>, AccessoryLiteralStringType].
NullType passes through (mirrors PHP's nullsafe ::class semantics).
ReflectionProvider is needed for the final-class lookup.
Overridden by
Implements
|
#
|
public
|
toObjectTypeForInstanceofCheck(): ClassNameToObjectTypeResult
Projects a class-name-or-object Type (the right-hand side of
$x instanceof <expr>) to the ObjectType it should be compared
against. Constant class strings collapse to their ObjectType
exactly; everything kept symbolically (object class names,
class-string<X>) carries an uncertainty flag so the caller can
fall back to BooleanType instead of a definite yes/no.
Projects a class-name-or-object Type (the right-hand side of
$x instanceof <expr>) to the ObjectType it should be compared
against. Constant class strings collapse to their ObjectType
exactly; everything kept symbolically (object class names,
class-string<X>) carries an uncertainty flag so the caller can
fall back to BooleanType instead of a definite yes/no.
Implements
|
#
|
public
|
toObjectTypeForIsACheck(Type $objectOrClassType, bool $allowString, bool $allowSameClass): ClassNameToObjectTypeResult
Projects a class-name-or-object Type (the second argument of
is_a($x, $class, $allow_string)) to the ObjectType to narrow
$x against. When $allowString is true, the is_a() result also
keeps the original class-string accepted alongside the object.
$allowSameClass controls whether matching the input's own class
collapses to NeverType for final classes (the call site's
"always-true" suppression).
Projects a class-name-or-object Type (the second argument of
is_a($x, $class, $allow_string)) to the ObjectType to narrow
$x against. When $allowString is true, the is_a() result also
keeps the original class-string accepted alongside the object.
$allowSameClass controls whether matching the input's own class
collapses to NeverType for final classes (the call site's
"always-true" suppression).
Implements
|
#
|
public
|
toAbsoluteNumber(): Type
|
#
|
public
|
toInteger(): Type
|
#
|
public
|
toFloat(): Type
|
#
|
public
|
toString(): Type
Models the (string) cast.
Models the (string) cast.
Implements
|
#
|
public
|
toArray(): Type
|
#
|
public
|
toArrayKey(): Type
Models PHP's implicit array key coercion: floats truncated to int,
booleans become 0/1, null becomes '', numeric strings become int.
Models PHP's implicit array key coercion: floats truncated to int,
booleans become 0/1, null becomes '', numeric strings become int.
Implements
|
#
|
public
|
toCoercedArgumentType(bool $strictTypes): Type
Returns how this type might change when passed to a typed parameter
or assigned to a typed property. With $strictTypes = true: int widens to int|float (since int is accepted
by float parameters in strict mode).
With $strictTypes = false: additional coercions apply, e.g. Stringable
objects are accepted by string parameters. Used internally to determine what types a value might be coerced to
when checking parameter acceptance.
Returns how this type might change when passed to a typed parameter
or assigned to a typed property. With $strictTypes = true: int widens to int|float (since int is accepted
by float parameters in strict mode).
With $strictTypes = false: additional coercions apply, e.g. Stringable
objects are accepted by string parameters. Used internally to determine what types a value might be coerced to
when checking parameter acceptance.
Implements
|
#
|
public
|
toBoolean(): BooleanType
|
#
|
public
|
isObject(): TrinaryLogic
|
#
|
public
|
getClassStringType(): Type
Return class-string<Foo> for object type Foo.
Return class-string<Foo> for object type Foo.
Overridden by
Implements
|
#
|
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
Unlike getMethod(), this defers template type and static type resolution.
Use getMethod() in most rule implementations.
Unlike getMethod(), this defers template type and static type resolution.
Use getMethod() in most rule implementations.
Overridden by
Implements
|
#
|
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. 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.
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
Returns the count of elements as a Type (typically IntegerRangeType).
Returns the count of elements as a Type (typically IntegerRangeType).
Implements
|
#
|
public
|
getIterableKeyType(): Type
Works for both arrays and Traversable objects.
Works for both arrays and Traversable objects.
Implements
|
#
|
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. Unlike isConstantScalarValue(), this also returns yes for constant array types (array shapes
with known keys and values). Use this when you need to detect any constant value including arrays.
Is Type of a known constant value? Includes literal strings, integers, floats, true, false, null, and array shapes. Unlike isConstantScalarValue(), this also returns yes for constant array types (array shapes
with known keys and values). Use this when you need to detect any constant value including arrays.
Implements
|
#
|
public
|
isConstantScalarValue(): TrinaryLogic
Is Type of a known constant scalar value? Includes literal strings, integers, floats, true, false, and null. Unlike isConstantValue(), this does NOT return yes for array shapes.
Use this when you specifically need scalar constants only.
Is Type of a known constant scalar value? Includes literal strings, integers, floats, true, false, and null. Unlike isConstantValue(), this does NOT return yes for array shapes.
Use this when you specifically need scalar constants only.
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
|
isDecimalIntegerString(): TrinaryLogic
When isDecimalIntegerString() returns yes(), the type
is guaranteed to be cast to an integer in an array key.
Examples of constant values covered by this type: "0", "1", "1234", "-1" When isDecimalIntegerString() returns no(), the type represents strings containing non-decimal integers and other text.
These are guaranteed to stay as string in an array key.
Examples of constant values covered by this type: "+1", "00", "18E+3", "1.2", "1,3", "foo"
When isDecimalIntegerString() returns yes(), the type
is guaranteed to be cast to an integer in an array key.
Examples of constant values covered by this type: "0", "1", "1234", "-1" When isDecimalIntegerString() returns no(), the type represents strings containing non-decimal integers and other text.
These are guaranteed to stay as string in an array key.
Examples of constant values covered by this type: "+1", "00", "18E+3", "1.2", "1,3", "foo"
Implements
|
#
|
public
|
isNonEmptyString(): TrinaryLogic
|
#
|
public
|
isNonFalsyString(): TrinaryLogic
Non-falsy string is a non-empty string that is also not '0'.
Stricter subset of non-empty-string.
Non-falsy string is a non-empty string that is also not '0'.
Stricter subset of non-empty-string.
Implements
|
#
|
public
|
isLiteralString(): TrinaryLogic
A literal-string is a string composed entirely from string literals
in the source code (not from user input). Used for SQL injection prevention.
A literal-string is a string composed entirely from string literals
in the source code (not from user input). Used for SQL injection prevention.
Implements
|
#
|
public
|
isLowercaseString(): TrinaryLogic
|
#
|
public
|
isClassString(): TrinaryLogic
|
#
|
public
|
isUppercaseString(): TrinaryLogic
|
#
|
public
|
getClassStringObjectType(): Type
Returns the object type for a class-string or literal class name string.
For non-class-string types, returns ErrorType.
Returns the object type for a class-string or literal class name string.
For non-class-string types, returns ErrorType.
Implements
|
#
|
public
|
getObjectTypeOrClassStringObjectType(): Type
Like getClassStringObjectType(), but also returns object types as-is.
Used for $classOrObject::method() where the left side can be either.
Like getClassStringObjectType(), but also returns object types as-is.
Used for $classOrObject::method() where the left side can be either.
Implements
|
#
|
public
|
isVoid(): TrinaryLogic
|
#
|
public
|
isScalar(): TrinaryLogic
|
#
|
public
|
looseCompare(Type $type, PhpVersion $phpVersion): BooleanType
|
#
|
public
|
isOffsetAccessible(): TrinaryLogic
|
#
|
public
|
isOffsetAccessLegal(): TrinaryLogic
Whether accessing a non-existent offset is safe (won't cause errors).
Unlike isOffsetAccessible() which checks if offset access is supported at all.
Whether accessing a non-existent offset is safe (won't cause errors).
Unlike isOffsetAccessible() which checks if offset access is supported at all.
Implements
|
#
|
public
|
hasOffsetValueType(Type $offsetType): TrinaryLogic
|
#
|
public
|
getOffsetValueType(Type $offsetType): Type
|
#
|
public
|
setOffsetValueType(?Type $offsetType, Type $valueType, bool $unionValues = true): Type
May add a new key. When $offsetType is null, appends (like $a[] = $value).
May add a new key. When $offsetType is null, appends (like $a[] = $value).
Implements
|
#
|
public
|
setExistingOffsetValueType(Type $offsetType, Type $valueType): Type
Unlike setOffsetValueType(), assumes the key already exists.
Preserves the array shape and list type.
Unlike setOffsetValueType(), assumes the key already exists.
Preserves the array shape and list type.
Implements
|
#
|
public
|
unsetOffset(Type $offsetType): Type
|
#
|
public
|
getEnumCases(): array
|
#
|
public
|
getEnumCaseObject(): ?EnumCaseObjectType
Returns the single enum case this type represents, or null if not exactly one case.
Returns the single enum case this type represents, or null if not exactly one case.
Overridden by
Implements
|
#
|
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
Returns a new instance with all inner types mapped through $cb.
Returns the same instance if inner types did not change. Not used directly — use TypeTraverser::map() instead.
Returns a new instance with all inner types mapped through $cb.
Returns the same instance if inner types did not change. Not used directly — use TypeTraverser::map() instead.
Overridden by
Implements
|
#
|
public
|
traverseSimultaneously(Type $right, callable $cb): Type
Like traverse(), but walks two types simultaneously. Not used directly — use SimultaneousTypeTraverser::map() instead.
Like traverse(), but walks two types simultaneously. Not used directly — use SimultaneousTypeTraverser::map() instead.
Overridden by
Implements
|
#
|
public
|
getNakedClassReflection(): ?ClassReflection
|
#
|
public
|
getClassReflection(): ?ClassReflection
|
#
|
public
|
getAncestorWithClassName(string $className): ?self
Returns this type projected onto an ancestor class, preserving generic type arguments.
Returns this type projected onto an ancestor class, preserving generic type arguments.
Implements
|
#
|
public
|
tryRemove(Type $typeToRemove): ?Type
|
#
|
public
|
getFiniteTypes(): array
Returns a list of finite values this type can take. 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.
Returns a list of finite values this type can take. 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
|
#
|
public
|
hasTemplateOrLateResolvableType(): bool
Performance optimization to skip template resolution when no templates are present.
Performance optimization to skip template resolution when no templates are present.
Overridden by
Implements
|
#
|