Vérifier les propriétés d'un objet stocké dans un tableau

Petit nouveau ! | 1 Messages

28 oct. 2022, 09:43

Bonjour à tous,
Je débute en PHP et sur ce forum, veuillez donc m'excuser d'avance pour mes ignorances.
Mon contexte :
J'ai créé une class pour instancier un objet "Humain".
Dans un autre script PHP je crée mes objets dans un tableau $players.

Code : Tout sélectionner

for ($i=1; $i <= $players_nb; $i++) { $players[$i] = new Humain(('killer'.$i),rand(1,9),100,0,false,0,true); $players[$i] -> info(); } var_dump($players);
le résultat est satisfaisant :
array (size=9)
1 =>
object(Humain)[1]
private 'name' => string 'killer1' (length=7)
private 'force' => int 2
private 'sante' => int 100
private 'experience' => int 0
private 'combatState' => boolean false
private 'combatTeam' => int 0
private 'aliveState' => boolean true

Ma problématique :

Je souhaite maintenant interroger le tableau créér : $players

Code : Tout sélectionner

foreach($players as $key => $value) { var_dump($value); }
Ceci fonctionne bien, mais pas ceci :

Code : Tout sélectionner

foreach($players as $key => $value) { if ( [$value]->combatState == false && [$value]->aliveState == true ) { $playersAlive++; } }
Je n'arrive pas à interroger les propriétés de l'objet afin de le tester.
Si vous aviez un idée de la syntaxe correcte cela m'aiderai beaucoup pour finir mon TC.
D'avance merci.

Avatar du membre
Mammouth du PHP | 1419 Messages

28 oct. 2022, 11:53

Salut, je sais pas pourquoi tu as mis des crochets mais il n'en faut pas.
$value->combatState et $value->aliveState.
Les propriétés doivent être à minima protected voir public pour pouvoir y accéder ainsi. Tel que c'est en private tu ne pourras pas y accéder (peut être une erreur même), il faudrait sinon faire des getters.
Quand tu écris [$value], tu crées un tableau contenant un élément $value. Les tableaux ne possèdent pas de propriété combatState ou aliveState ce qui doit générer une erreur, si y a déjà pas une erreur de syntaxe.
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^