Issues (15)

src/DateTimeImmutableFactory.php (2 issues)

1
<?php
2
3
declare(strict_types=1);
4
5
namespace Arp\DateTime;
6
7
use Arp\DateTime\Exception\DateTimeFactoryException;
8
9
class DateTimeImmutableFactory implements DateTimeFactoryInterface
10
{
11
    private DateTimeFactory $dateTimeFactory;
12
13
    /**
14
     * @throws DateTimeFactoryException
15
     */
16
    public function __construct(
17
        ?string $dateTimeClassName = null,
18
        ?DateTimeZoneFactoryInterface $dateTimeZoneFactory = null
19
    ) {
20
        $dateTimeClassName ??= \DateTimeImmutable::class;
21
        if (!is_a($dateTimeClassName, \DateTimeImmutable::class, true)) {
22
            throw new DateTimeFactoryException(
23
                sprintf(
24
                    'The \'dateTimeClassName\' parameter must be a class name that implements \'%s\'',
25
                    \DateTimeImmutable::class
26
                )
27
            );
28
        }
29
30
        $dateTimeZoneFactory ??= new DateTimeZoneFactory();
31
        $this->dateTimeFactory = new DateTimeFactory($dateTimeZoneFactory, $dateTimeClassName);
32
    }
33
34
    /**
35
     * @throws DateTimeFactoryException
36
     */
37
    public function createDateTime(
38
        ?string $spec = null,
39
        string|\DateTimeZone|null $timeZone = null
40
    ): \DateTimeImmutable {
41
        /**
42
         * @phpstan-ignore-next-line
43
         * @noinspection PhpIncompatibleReturnTypeInspection
44
         */
45
        return $this->dateTimeFactory->createDateTime($spec, $timeZone);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->dateTimeFa...eTime($spec, $timeZone) returns the type DateTimeInterface which includes types incompatible with the type-hinted return DateTimeImmutable.
Loading history...
46
    }
47
48
    /**
49
     * @throws DateTimeFactoryException
50
     */
51
    public function createFromFormat(
52
        string $format,
53
        string $spec,
54
        string|\DateTimeZone|null $timeZone = null
55
    ): \DateTimeImmutable {
56
        /**
57
         * @phpstan-ignore-next-line
58
         * @noinspection PhpIncompatibleReturnTypeInspection
59
         */
60
        return $this->dateTimeFactory->createFromFormat($format, $spec, $timeZone);
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->dateTimeFa...rmat, $spec, $timeZone) returns the type DateTimeInterface which includes types incompatible with the type-hinted return DateTimeImmutable.
Loading history...
61
    }
62
}
63