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.'); } }