Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2010, 18h43   #1
Invité de passage
 
Inscription : décembre 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 13
Points : 3
Points : 3
Par défaut Question au sujet des variables de classes.

Bonjour à tous,

J'ai un petit problème que je n'arrive pas à comprendre.
Je fais essayer de faire un exemple:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
Class a{
 
public $valeur;
 
function verif(){
b::longueur();
}
 
}
 
Class b{
 
function longueur(){
echo $objet->valeur;// Ne marche pas
echo $this->valeur;// Marche
}
 
}
 
$objet=new a();
$objet->verif();
Je me dis que $objet->valeur ne marche pas vu qu'a l'intérieur d'une fonction, à par les variables globales, le reste n'existe pas.
$this->valeur fonctionne par contre et je ne comprend pas pourquoi. c'est comme si, comme je l'avais appelé d'un objet de la classe a, la fonction longueur faisait aussi partie de la classe a.

Je ne sais pas si je suis très clair mais si quelqu'un pouvait m'éclairer parce que je n'ai rien trouvé qui explique ce phénomène.
choupierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 18h47   #2
Invité de passage
 
Inscription : décembre 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 13
Points : 3
Points : 3
Et si je passe la variable en private, la 2eme solution ne marche plus non plus.
choupierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 19h00   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 464
Points : 8 464
dans B $objet n'existe pas, et tu peux pas acceder a $this en statique

qu'est ce que tu voudrais avoir au final ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 19h01   #4
Invité de passage
 
Inscription : décembre 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 13
Points : 3
Points : 3
Mais pourquoi puis je accéder à $this alors que je suis dans une fonction d'une autre classe?
choupierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 19h05   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 464
Points : 8 464
Citation:
Envoyé par choupierre Voir le message
Mais pourquoi puis je accéder à $this alors que je suis dans une fonction d'une autre classe?

par que ton mode d'erreur est trop bas, et que une fonction static dois etre définie via le mot clé "static"
public static function longueur

la tu appelle statiquement une fonction non statique
travaille en E_ALL | E_STRICT
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 19h05   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
$this->valeur fonctionne par contre et je ne comprend pas pourquoi.
Moi non plus D'ailleurs si on exécute ton script en mode strict on obtient :

Strict Standards: Non-static method b::longueur() should not be called statically, assuming $this from incompatible context in C:\dev\www\Tests\oop.php on line 11

Bref, à éviter.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 19h09   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 464
Points : 8 464
Citation:
Envoyé par Séb. Voir le message
Moi non plus D'ailleurs si on exécute ton script en mode strict on obtient :

Strict Standards: Non-static method b::longueur() should not be called statically, assuming $this from incompatible context in C:\dev\www\Tests\oop.php on line 11

Bref, à éviter.
tu peux le faire mais c'est une erreur de type Strict Standards, $this reste dans le scope de la méthode verif de A
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 19h15   #8
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
tu peux le faire
Je le découvre ici et cela me semble être un non-sens, j'éviterai donc.

Citation:
$this reste dans le scope de la méthode verif de A
Ouaip on dirait.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 19h31   #9
Invité de passage
 
Inscription : décembre 2003
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 13
Points : 3
Points : 3
Merci beaucoup, cela s'éclaire un peu dans ma tete.
choupierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h12.


 
 
 
 
Partenaires

Hébergement Web