Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania
Viewing all articles
Browse latest Browse all 65225

Jak wymusić typ interfejs w tablicy?

$
0
0

Dobry wieczór.

Potrzebuję wymusić typ interfejsu Unit w tablicy.

    public function addUnits(Unit $unit)
    {
        $this->units[] = $unit;
    }

Podczas gdy to normalny sposób, ja chcę wywołać coś w ten deseń:

    public function addUnits(Unit [$unit])
    {
        $this->units[] = $unit;
    }

Oczywiście, takowy kod zwróci błąd.

Próbowałem z czymś takim:

    public function addUnits(array $unit)
    {
        if (!$unit[0] instanceof Unit) {
            throw new \InvalidArgumentException('Objects must be instance of Units interface.');
        }
    }

Ale to sprawdza tylko pierwszy indeks, gdy takowych może być więcej.

Gdyby ktoś potrzebował całego kodu tejże klasy, to:

namespace WarCraft\Unit; 

use WarCraft\Unit\Units\Unit; 

abstract class UnitComposite extends Unit
{
    protected $units = [];

    public function addUnits(array $unit)
    {
        $this->units = $unit;
    }
}

Jakie będzie najlepsze rozwiązanie tego problemu?


Rozwiązanie to pętla foreach.

Kod:

        foreach ($unit as $units) {
            if (!$units instanceof Unit) {
                throw new \InvalidArgumentException('Objects must be instance of Units interface.');
            }
        }

 


Viewing all articles
Browse latest Browse all 65225

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>