newInstanceWithoutConstructor(); $constructor = new \ReflectionMethod($result, '__construct'); $constructor->setAccessible(true); $constructor->invoke($result, ...$arguments); return $result; } public static function getProtectedProperty(mixed $instance, string $propertyName): mixed { $reflector = new \ReflectionClass($instance::class); $property = new \ReflectionProperty($instance, $propertyName); $property->setAccessible(true); return $property->getValue($instance); } public static function setProtectedProperty(mixed $instance, string $propertyName, mixed $value): void { $reflector = new \ReflectionClass($instance::class); $property = new \ReflectionProperty($instance, $propertyName); $property->setAccessible(true); $property->setValue($instance, $value); } }