1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class C implements ArrayAccess {
private $_array = [];
public function offsetSet($offset, $value) {
// on contrôle le type à chaque ajout.
// NB: ici on ne peut pas utiliser de typehint car l'interface ArrayAccess l'interdit.
if (!$value instanceof A)
throw new InvalidArgumentException('La valeur n\'est pas une instance de A');
if (is_null($offset))
$this->_array[] = $value;
else
$this->_array[$offset] = $value;
}
public function offsetExists($offset) {
return isset($this->_array[$offset]);
}
public function offsetUnset($offset) {
unset($this->_array[$offset]);
}
public function offsetGet($offset) {
return isset($this->_array[$offset]) ? $this->_array[$offset] : null;
}
}
class B
{
public function FB(C $tab) {
for ($numero = 0; $numero < 4; $numero++) {
$tab[$numero]->FA();
}
}
}
$tab = new C;
try {
$tab[] = new A;
$tab[] = new A;
$tab[] = new A;
$tab[] = new A; // $tab[] = 6;
} catch (InvalidArgumentException $e) {
echo $e->getMessage() . ':' . PHP_EOL;
echo $e->getTraceAsString() . PHP_EOL;
exit(1);
}
$objB = new B;
$objB->FB($tab); |