OVH Cloud OVH Cloud

Variables globales dans un objet...

3 réponses
Avatar
PluX
Bonjour,

Je ne sais pas si ma question cadre avec ce forum... Mille excuses si ça
n'est pas le cas.

J'utilise PHP 4.3.3, et j'ai un léger souci (peut-etre déja évoqué):

J'ai la structure (succincte) suivante:

class MaClasse_1 {
var $var_1;
...
}

class MaClasse_2 extends MaClasse_1 {
var $var_2 = $varGlobale; /* Erreur ici */
}

Comme de bien entendu, j'ai une variable globale $varGlobale qui est
initialisée et non vide.

Le souci c'est que j'ai une erreur sur la ligne d'initialisation de la
propriete $var_2 de la classe MaClasse_2.

Sur PHP 3.0.18, ça fonctionne sans souci, mais la...

Merci pour votre aide :)

Christophe

3 réponses

Avatar
Olivier Miakinen

class MaClasse_2 extends MaClasse_1 {
var $var_2 = $varGlobale; /* Erreur ici */
}

Le souci c'est que j'ai une erreur sur la ligne d'initialisation de la
propriete $var_2 de la classe MaClasse_2.


Il ne manquerait pas un « global $varGlobale; » ?

Sur PHP 3.0.18, ça fonctionne sans souci


Ça me semble étonnant.

Avatar
Francis Spiesser

Comme de bien entendu, j'ai une variable globale $varGlobale qui est
initialisée et non vide.

Le souci c'est que j'ai une erreur sur la ligne d'initialisation de la
propriete $var_2 de la classe MaClasse_2.

Sur PHP 3.0.18, ça fonctionne sans souci, mais la...

Je crois (de mémoire) qu'il faut explicietement déclarer que tu vas

utiliser une variable globale dans ta classe :

class MaClasse_2 extends MaClasse_1 {
global $varGlobale;
var $var_2 = $varGlobale; /* Erreur ici */
}

--

------------------------------
Francis


"Le présent n'est qu'un futur qui a vieilli"

Avatar
Jean-Marc Molina
Bonjour

Oula carnage de bon matin.
Règle OO : NE JAMAIS UTILISER DE VARIABLES GLOBALES

Pourquoi en as-tu besoin ?
Pour initialiser un attribut de ta classe, utilise le constructeur de cette
derrière.
Le principe c'est d'encapsuler ce que tu peux dans ta classe pour garder le
contrôle. Ici $varGlobale peut faire tout et n'importe quoi et contrôler la
classe de l'extérieur. De plus un attribut de classe n'existe que lorsque
cette classe est instanciée, il est donc normal que tu ne puisses
l'initialiser.
En COO il n'y a que les constantes et les variables statiques qui peuvent
initialisées de la sorte.
À ma connaissance PHP4 ne supporte ni l'une ni l'autre :(

J'ai la structure (succincte) suivante:


On parle de classe et non pas de structure. Une structure est un agrégat
d'attributs, une classe est une structure qui possède des méthodes,
attributs appelés parfois propriétés (tout dépend du langage).

Solution PHP :
class MaClasse_2 extends MaClasse_1 {
var $var_2;

function MaClasse_2 ($varGlobale)
{
$this->var_2 = $varGlobale;
}
}

J'ai laissé $varGlobale comme nom mais vu que ça n'est pas une globale tu
devrais la renommer.
Pour plus d'infos je te conseille de lire le manuel, tout y est expliqué. De
plus n'oublie pas que PHP4 n'est pas un langage orienté objet comme C++,
Java, Python ou encore Smalltalk. Mon conseil c'est d'attendre PHP5 et d'en
reste à une programmation purement fonctionnel, sauf si tu en as vraiment
besoin...

JM

--
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)