Bonjour,

J'ai une classe OptListSelect qui permet de créer une balise <select> avec ses attributs et une deuxième classe OptListOption qui permet de créer une balise <option> avec ses attributs également.
Lorsque j'essaie de faire fonctionner les deux classes ensemble, j'ai une erreur:
Fatal error: Uncaught TypeError: Argument 1 passed to moimp\OptListSelect\OptListSelect::addOption() must be an instance of moimp\OptListSelect\optListOption, instance of moimp\OptListOption\OptListOption given, called in C:\wamp64\www\MP_tools\Version.1.2\classes\test.php on line 9 and defined in C:\wamp64\www\MP_tools\Version.1.2\classes\OptListSelect.php:22
Je ne comprends pas la partie en rouge puisque je veux utiliser une instance de OptListOption et c'est ce que j'ai écrit ligne 22. Les numéros de lignes correspondent aux extraits de code donnés ici. Supposant qu'il s'agit d'un mauvais tour du cache, j'ai fait plusieurs ctrl+F5 et j'ai fermé et redémarrer le navigateur mais l'erreur persiste. Je me demande alors, si j'ai un problème dans mon code mais je ne vois pas.

Code OptListSelect:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
<?php
 
namespace moimp\OptListSelect;
 
use Exception;
 
class OptListSelect
{
	private $options	= [];
	private $groups		= []; // inutilisé pour l'instant
	private $name		= '';
	private $attributes	= [];
 
	// ...
 
	public function setName(string $value) {
		$this->name = $value;
	}
 
	// ...
 
	public function addOption(optListOption $option) {
		$this->options[] = $option;
	}
 
	// ...
 
	public function __toString() {
		// code
	}
 
	public function __construct(string $name, array $attributes = []) {
		// code
	}
 
}
Code OptListOption:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
<?php
 
namespace moimp\OptListOption;
 
use Exception;
 
class OptListOption
{
	private $value = '';
	private $text;
	private $selected = false;
 
	// ...
 
	public function setValue(string $value) {
		$this->value = $value;
	}
 
	// ...
 
	public function setText(string $value) {
		$this->text = $value;
	}
 
	// ...
 
	public function setSelected($value) {
		$this->selected = (bool)$value;
	}
 
	public function __toString() {
		return sprintf(
			'<option%s%s>%s</option>',
			is_null($this->value) ? '' : sprintf(' value="%s"', $this->value),
			$this->selected ? ' selected="selected"' : '',
			$this->text
		);
	}
 
	public function __construct($value = '', $text = '', $selected = false) {
		$this->setValue($value);
		$this->setText($text);
		$this->setSelected($selected);
	}
}
Code test d'utilisation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<?php
 
require('OptListSelect.php');
require('OptListOption.php');
use moimp\OptListSelect\OptListSelect;
use moimp\OptListOption\OptListOption;
 
$x = new OptListSelect('xx', ['id'=>22]);
$x->addOption(new optListOption(''));
$x->addOption(new optListOption('M'));
$x->addOption(new optListOption('F'));