<?php
class MyRequest
{
public function __construct()
{
$reflectedProperties = (new \ReflectionClass($this))->getProperties();
foreach ($reflectedProperties as $property) {
!$property->isInitialized($this) ??
$property->getType()->allowsNull() ? $property->setValue($this, null) : null;
}
}
}
class PostRequest extends MyRequest
{
public ?string $title;
public string $name;
}
$postRequest = new PostRequest();
$postRequest->name = 'foo';
// works fine - I have access here!
foreach($postRequest as $property) {
var_dump($property);
}
Fatal error: Uncaught TypeError: Cannot assign null to property PostRequest::$name of type string in /in/5fqUR:10
Stack trace:
#0 /in/5fqUR(10): ReflectionProperty->setValue(Object(PostRequest), NULL)
#1 /in/5fqUR(24): MyRequest->__construct()
#2 {main}
thrown in /in/5fqUR on line 10
Process exited with code 255.
Output for 7.4.0 - 7.4.33
Fatal error: Uncaught TypeError: Typed property PostRequest::$name must be string, null used in /in/5fqUR:10
Stack trace:
#0 /in/5fqUR(10): ReflectionProperty->setValue(Object(PostRequest), NULL)
#1 /in/5fqUR(24): MyRequest->__construct()
#2 {main}
thrown in /in/5fqUR on line 10
Process exited with code 255.
Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33
Parse error: syntax error, unexpected '?', expecting function (T_FUNCTION) or const (T_CONST) in /in/5fqUR on line 19
Process exited with code 255.