Classe abstraite et définition d'attributs dans celle ci

Damador
Invité n'ayant pas de compte PHPfrance

06 janv. 2011, 10:56

Bonjour, voila j'ai un petit problème j'ai une classe abstraite dans laquelle j'ai définis des attributs voici une partie de code :

public static $id;
public $label;
public $nomRecup;
public $nomRecupSansCrochet;

Je voudrais savoir si il est normal que je n'arrive pas a appeler l'id dans mes méthodes de cette classe :
public function genereId()
{
$nomWithoutSpaces = str_replace(' ','',$this->label);
$this->nomRecupSansCrochet = $this->stripAccents($nomWithoutSpaces).'_'.ChampOptionnel.$this->id;
$this->nomRecup = $this->nomRecupSansCrochet.'[]';
$this->incrementeId();
return $this->nomRecup;
}

ici impossible de récuperer l'id. Ensuite j'ai une autre question est-t'il possible d'incrémenter une variable static définis dans une classe. je m'éxplique j'ai mon id et je voudrais que pour chaque champOptionnel avoir un id différent. Comme pourrais-je faire?

ViPHP
ViPHP | 5462 Messages

06 janv. 2011, 11:09

pourquoi avec mis id en static ?
public static $id;

Damador
Invité n'ayant pas de compte PHPfrance

06 janv. 2011, 11:18

aucun raison particulière je m'en servais auparavant dans d'autre classe ce qui n'est plus le cas maintenant. Cela change-t'il quelque chose?

ViPHP
ViPHP | 5462 Messages

06 janv. 2011, 11:28

aucun raison particulière je m'en servais auparavant dans d'autre classe ce qui n'est plus le cas maintenant. Cela change-t'il quelque chose?
oui t'as pas acces via $this en static, enlevé le je pense que c'est la source de tes problèmes et qu'il n'est pas justifié

Damador
Invité n'ayant pas de compte PHPfrance

06 janv. 2011, 11:34

Oui mais voyez vous le problème étant que comme je déclare mon attribut étant égal à 0 :
public $id = 0;

à Chaque création d'un objet fils, mon $id se remet à 0 et même si je l'incrémente cela ne change rien. : x

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

06 janv. 2011, 11:49

Bonjour,

Les membres statiques déclarés par le modificateur 'static' ne sont pas instanciés et sont donc accessibles par les instances ou les filles d'une même classe directement via la classe mère.
* Pour y accéder depuis un objet instance de la classe, il faut utiliser comme référence, le nom de la classe en tant que chemin d'accès comme ça: MaClasse::membreStatic.
* Pour y accéder dans le contexte descriptif de la classe elle-même, il faut utiliser une référence cyclique comme chemin d'accès de type : self::membreStatic.
* Pour y accéder via une sous-classe fille, il faut utiliser une référence d'héritage comme chemin d'accès à savoir : parent::membreStatic.

En clair, voici des exemples
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Damador
Invité n'ayant pas de compte PHPfrance

06 janv. 2011, 11:57

Ok, merci à vous deux pour ceux qui cherche je leur mets un bout de code :

//declaration
public static $id=0;

//utilisation (champOptionnel étant le nom de ma classe)
ChampOptionnel::$id

//incrémentation
ChampOptionnel::$id += 1;

Merci et bonne journée.

ViPHP
ViPHP | 5462 Messages

06 janv. 2011, 12:09

et jamais tu fait de new ChampOptionnel a un moment dans ton code ? comment tu accèdes a genereId ?