OVH Cloud OVH Cloud

Php4, classes et tableaux...

2 réponses
Avatar
bibi.skuk
Bonjour,

Je cherche à utiliser un classe pour gerer les personnages d'un jeu
php/MySQL

N'ayant jamais utilisé les classes en php avant, je rencontre quelques
problèmes surement basiques, alors escusez moi si mes questions on
déja été posées.

Mon principal problème est la gestion de tableaux dans les variables
de la classe.

J'utilise le code suivant pour décrire ma classe (simplifié pour
l'exemple)

<?php
class personnage
{
var $nom , $id ;
var $competence ;

function personnage( $id , $nom )
{
$this->id = $id ;
$this->nom = $nom ;
}

function gene_comp( )
{
$res = RequeteSql( "SELECT id, nom FROM competences WHERE 1" )
;
$this->competence = array( ) ;

while( $inf = mysql_fetch_array( $res , MYSQL_ASSOC ) )
{
$this->competence[ $inf[ 'id' ] ] = array( 'nom' => $inf[
'nom' ],
'val' => 0
) ;
}
}
}
?>

Donc quand je fait le code suivant j'ai mes competences qui sont
rentrées correctement

<?php
$perso = new personnage( 1 , 'test' ) ;

$perso->gene_comp( ) ;
?>

Mais si je veux affichier la liste des compétences ( et c'est là que
ca doit foirer ), rien ne s'affiche.

<?php
echo $perso->competence[ 1 ][ 'nom' ] ;
?>

par contre si je fait
<?php
get_object_vars( $perso ) ;
?>
ca s'affiche. ( donc c'est bien rentre dans l'objet. )

Voila, je ne comprend pas comment ca se fait que ca ne veux pas
s'afficher.

Merci d'avance pour vos réponses

2 réponses

Avatar
jeremie.fouche
<?php
echo $perso->competence[ 1 ][ 'nom' ] ;
?>


Je mettrai plutot :
$perso->competence['1']['nom'];

car il me semble que mysql_fetch_array retourne des clefs sous forme de
string. A confirmer

--
Jérémie

Avatar
bibi.skuk
en fait, confirmation, c'est pas un probleme de clef sous forme de
string... de toute manière, php fait changements de type automatique,
c'est simplement, que en me remettant su rmon code, j'ai betement vu
que contrairement à ce que j'ai écrit je n'avait pas fait
<?php
$perso->gene_comp( ) ;
?>
mais
<?php
$this->gene_comp( ) ;
?>

ce qui marche tout de suite beaucoup moins bien...

je suis désolé d'avoir posté pour rien...

et merci quand même