Bonjour,
j'ai 2 classes Arme et Player à instancier et à afficher. Dans Arme il y a un id auto-incrémenté et et un tableau $armes en static.

Dans Player il y a un idArme qui le relie à Arme.

J'ai écris mes classes et mon index.php. Lors de l'affichage du player pas de soucis mais je n'arrive pas à afficher les infos de l'arme correspondante.

Dans index.php (ligne 28):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $arme = Arme::recupererArme($player->getIdArme());
ça m'affiche le message d'erreur suivant :
Fatal error: Uncaught Error: Call to a member function getIdArme() on null
Pourtant un var_dump de montre qu'il y a bien une valeur ().

Voici le code et merci pour votre aide :

classe Arme (pour alléger je n'ai pas mis les getters/setters) :

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
 
<?php
 
class Arme
{
    private static $compteur = 1;
    private $id;
    private $nom;
    private $degat;
    private static $armes = []; // Pour faire la liaison entre arme et player
    // Puis écrire une fonction qui récupère une arme en
    // fonction de l'id .
 
    public function __contruct($nom, $degat)
    {
        $this->setNom($nom);
        $this->setDegat($degat);
        $this->id = self::$compteur;
        self::$compteur++;
        self::$armes[] = $this;
    }
 
    public static function recupererArme($id)
    {
        foreach (self::$armes as $arme) {
            if ($arme->id === $id) {
                return $arme;
            }
        }
    }

Classe Player :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
<?php 
class Player{
    private $nom;
    private $force;
    private $pv;
    private $idArme;
 
    public function __construct(){
        $this->setForce(5);
        $this->setPv(100);
    }
index.php :

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
 
<?php
require 'Arme.php';
require 'Player.php';
 
 
$player1 = new Player();
$player1->setNom("Milo");
$player1->setIdArme(1);
 
$player2 = new Player();
$player2->setNom("Tya");
$player2->setIdArme(2);
 
$players = [$player1, $player2];
 
 
$arme1 = new Arme("Hache", 10);
$arme2 = new Arme("Epée", 8);
 
foreach ($players as $player) {
    echo "<br>"; 
    echo "Nom :" . $player->getNom() . "<br>"; 
    echo "Force :" . $player->getForce() . "<br>"; 
    echo "PV :" . $player->getPV() . "<br>"; 
 
    echo "Arme :<br>"; 
    $arme = Arme::recupererArme($player->getIdArme());
    var_dump($player->getIdArme());
    echo "id :" . $arme->getId() . "<br>"; 
    echo "Nom :" . $arme->getNom() . "<br>"; 
    echo "Dégat :" . $arme->getDegat() . "<br>"; 
    echo "----------------";
}