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