pay-now / paynow-php-sdk

PHP Library for Paynow API
https://docs.paynow.pl
MIT License
15 stars 10 forks source link

Metoda Paynow\Response\PaymentMethods\PaymentMethods::getAll() może zwrócić null #71

Open piotr-dziubczynski-spyro opened 8 months ago

piotr-dziubczynski-spyro commented 8 months ago

Deklaracja parametru metody wygląda w ten sposób:

    /**
     * @var PaymentMethod[]
     */
    private $list;

A getter dla tego parametru wygląda tak:

    /**
     * Retrieve all available payment methods
     *
     * @return PaymentMethod[]
     */
    public function getAll()
    {
        return $this->list;
    }

Jest to jednak zbyt optymistyczne podejście...

Konstruktor klasy wygląda tak:

    public function __construct($body)
    {
        if (! empty($body)) {
            foreach ($body as $group) {
                if (! empty($group->paymentMethods)) {
                    foreach ($group->paymentMethods as $item) {
                        $this->list[] = new PaymentMethod(
                            $item->id,
                            $group->type,
                            $item->name,
                            $item->description,
                            $item->image,
                            $item->status,
                            $item->authorizationType ?? null
                        );
                    }
                }
            }
        }
    }

Istnieje więc szansa, że zmienna $body lub $group->paymentMethods będzie pusta, więc w rezultacie nie dojdziemy nawet do wypełnienia $this->list.

Rozwiązanie: Zmienić deklarację parametru na taką:

private array $list = [];

Swoją drogą, kiedy przejście kodem na PHP 8.2?

piotr-dziubczynski-spyro commented 8 months ago

BTW, w tym miejscu przydałby się jednak Mapper. Nawet z metodą statyczną.

$this->list[] = new PaymentMethod(
    $item->id,
    $group->type,
    $item->name,
    $item->description,
    $item->image,
    $item->status,
    $item->authorizationType ?? null
);