2010-10-22 15 views
1

Fondamentalement, j'ai deux classes Inventory et Character. Au cours de la construction de l'inventaire, j'essaie de déterminer les caractères de sexe mais cela ne semble pas fonctionner pour moi du tout ... Je n'ai pas vraiment utilisé les fonctions statiques avant alors si quelqu'un pouvait souligner ce que je « m faire le mal, il serait très apprécié ...Appel d'une méthode de classe à partir d'une autre classe ..

fichier 1:

class Inventory 
{ 
    protected $user_gender; 
    public function __construct($id = 0) 
    { 
     $user_gender = Character::getGenderStatic(); 
    } 
} 

fichier 2:

class Character 
{ 
    protected static $gender; 
    public static function getGenderStatic() { 
     return self::$gender; 
    } 
} 
+1

semble correct pour moi, je ne sais pas ce qui ne va pas. Y a-t-il un message d'erreur? – NikiC

+0

Character :: $ est-il correctement initialisé dans un code statique avant de l'utiliser pour la première fois? – mojuba

+0

Comme quelqu'un qui regrette d'écrire beaucoup de classes bourrés de vars statiques, ne le faites pas. les statistiques rendent les classes plus difficiles à étendre, à tester et à utiliser en tant qu'arguments à indice de type. –

Répondre

1

Dans le constructeur pour Inventory vous avez

$user_gender = Character::getGenderStatic();

Cela fait une nouvelle variable qui est scope au constructeur. Vous voulez dire probablement

$this->user_gender = Character::getGenderStatic();

qui fait référence à la variable objet d'inventaire protégé vous définissez au début de la classe.

Je ne vois rien de mal dans la façon dont vous utilisez les fonctions statiques, sauf que vous n'avez pas défini de valeur pour Character::$gender (la variable statique protégée que vous définissez au début de la classe de caractères) mais je suppose que vous mettre ça ailleurs.

+0

Merci Robert mais ça n'a pas l'air de le résoudre du tout! Le genre est défini dans la classe de caractères et extrait de la base de données. Il n'a aucun problème à obtenir le genre sur les pages normales mais dans cette classe .... * roule des yeux * – Sean

+0

Comment savez-vous que cela ne fonctionne pas? Quel résultat spécifique attendez-vous et que se passe-t-il à la place? – Robert

+0

Fondamentalement, je fais une déclaration si et si le sexe est égal à un homme, il insère des informations dans la base de données basée sur le mâle. Dans mon exemple Caractère-> user_gender fait = 'm' mais il ne semble pas le tirer dans $ this-> user_gender .. Cependant, il utilise simplement la partie else de ma déclaration et met dans les informations féminines .. Exemple de code : if ($ this-> user_gender == 'm') {$ db-> query = "base masculine";)} else {$ db-> query = "base féminine"); } – Sean