PHPParameter
class PHPParameter extends BasePHPElement (View source)
Methods
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
Resolves a deferred default value on first read, then caches it.
No description
No description
No description
Details
string|null
getName()
No description
void
setName(string|null $name)
No description
string|null
getId()
No description
void
setId(string|null $id)
No description
StubsMetadata|null
getStubsMetadata()
No description
StubsMetadata
initStubsMetadata()
No description
__construct(string|null $name)
No description
StandaloneType|UnionType|NullableType|NoType|IntersectionType
getDeclaredType()
No description
void
setType(StandaloneType|UnionType|NullableType|NoType|IntersectionType $type)
No description
int
getPosition()
No description
void
setPosition(int $position)
No description
bool
isOptional()
No description
void
setIsOptional(bool $isOptional)
No description
bool
isVariadic()
No description
void
setIsVariadic(bool $isVariadic)
No description
bool
isPassedByReference()
No description
void
setIsPassedByReference(bool $isPassedByReference)
No description
bool
isDeprecated()
No description
void
setDeprecated(bool $isDeprecated)
No description
mixed
getDefaultValue()
Resolves a deferred default value on first read, then caches it.
This is the one getter here that is not a plain field read, which reads as a violation of the "models are pure data holders" rule — so, why it has to be deferred:
A default value may reference a constant (PHP_INT_MAX, SOME\Ext::FLAG) that is not
resolvable at the moment the parameter is parsed, because the constant may be declared
in a stub file that has not been parsed yet. Evaluating eagerly in StubParameterParser
would therefore resolve some defaults to null purely because of file ordering; the
evaluator exists so resolution happens after StubConstantRegistry is fully populated.
The mutation is memoisation of a deterministic computation, so the value observed is the same on every call — but it is genuinely deferred work, not a field read. Moving it out would mean a post-parse resolution pass over every parameter before serialization.
A failure to evaluate yields null rather than propagating: the evaluator normalises everything it cannot compute (including DivisionByZeroError, see NikicConstExprEvaluatorTrait) to \RuntimeException, which is absorbed here.
void
setDefaultValue(mixed $defaultValue)
No description
void
setDefaultValueEvaluator(Closure $evaluator)
No description
bool
hasDefaultValue()
No description
void
setHasDefaultValue(bool $hasDefaultValue)
No description