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