Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1855 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Php][Classe][Debutant] hum, où est l'erreur dans ma classe?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Php][Classe][Debutant] hum, où est l'erreur dans ma classe?

n°1208961
Aschrack
Vive Pen²
Posté le 27-09-2005 à 17:09:26  profilanswer
 

Bonjour,
je tente actuellement d'apprendre le php et au cours de mes différents test d'apprentissage, j'ai créé cette classe (qui en soit, n'a ni intérêt, ni objectif autre que de tester l'implémentation d'une classe en php et d'en faire l'utilisation)
 

Code :
  1. class Etudiant
  2. {
  3.  // Déclarations des données membres
  4.  var $IQ;
  5.  var $Status;
  6.  var $name;
  7.  // Déclarations des méthodes
  8.  function Etudiant($nom = "etudiant", $the_IQ = 0) /*constructeur de classe*/
  9.  {
  10.   $name = $nom;
  11.   $IQ = $the_IQ;
  12.   if ( $IQ <= 110 )
  13.    $Status = "dommerik";
  14.   else
  15.    $Status = "clever";
  16.  }
  17.  function getStatus()
  18.  {
  19.   return $Status;
  20.  }
  21.  function getIQ()
  22.  {
  23.   return $IQ;
  24.  }
  25.  function isClever()
  26.  {
  27.   if(getStatus() == "clever" )
  28.    return TRUE;
  29.   else
  30.    return FALSE;
  31.  }
  32. }
  33. $student = new Etudiant("Mauvais_etudiant" );
  34. echo $student->isClever();
  35. echo $student->getStatus();
  36. if($student->isClever == TRUE)
  37.  echo '<br>'.$student->name.' est intelligent';
  38. else
  39.  echo '<br>'.$student->name.' n\' est pas intelligent';


 
et je me prend  

Citation :

Fatal error: Call to undefined function: getstatus() in d:\program files\easyphp1-8\www\test.php on line 113

comme erreur (où la ligne 113 est la ligne 31 ici)
 
Auriez vous une idée du pourquoi du comment? :)
 
PS: tant que j'y pense, pour l'instant, je suis le guide du site "commentcamarche" ayant d'abord débuté avec celui de nexen qui semblait à ce qu'ils indiquaient être plus utile pour des personnes ayant déja de l'expérience dans le php. Seulement, au niveau POO celui de comment ça marche ne semble pas avoir été mis à jour depuis php3 ce qui est assez ennuyeu vu qu'étant à php5, je suppose que de ce côté il y eu pas mal d'amélioration? Auriez vous un guide/tutoriel à me suggérer à ce sujet? (ce n'est pas, je suppose, extrêmement important pour l'instant mais bon. Vu que mon objectif par l'apprentissage du php est de pouvoir réaliser un projet pour un cours de base de donnée, où l'objectif est plus d'utiliser la base de donnée qu'un langage (d'ailleurs, le langage est laissé au choix))


---------------
Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet ! (antp était prems et est admin) - "Le travail est l'opium du peuple et je ne veux pas mourir dr
mood
Publicité
Posté le 27-09-2005 à 17:09:26  profilanswer
 

n°1208970
FlorentG
Unité de Masse
Posté le 27-09-2005 à 17:13:06  profilanswer
 

Déjà dans le constructeur, y'a un bug :

$this->name = $nom;
$this->IQ = $the_iq;


Ensuite, je vois pas l'interêt de mettre des trucs genre "the_iq" :

function Etudiant($name = "etudiant", $IQ = 0) {
  $this->name = $name;
  $this->IQ = $IQ;
}


C'est une erreur de débutant qu'on voit souvent : ils croivent (du verbe croiver) que mettre un nom de paramètre égale à un nom de membre pose problème. Or, il n'en est rien...
 
ensuite pour le problème, faut mettre :

function isClever()  
{
  if($this->getStatus() == "clever" )
    return TRUE;
  else
    return FALSE;
}

n°1208998
Aschrack
Vive Pen²
Posté le 27-09-2005 à 17:45:04  profilanswer
 

FlorentG a écrit :


ensuite pour le problème, faut mettre :

function isClever()  
{
  if($this->getStatus() == "clever" )
    return TRUE;
  else
    return FALSE;
}


thx, effectivement fallait mettre des $this, merci :)


---------------
Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet ! (antp était prems et est admin) - "Le travail est l'opium du peuple et je ne veux pas mourir dr
n°1209003
ukyo81
Posté le 27-09-2005 à 17:49:24  profilanswer
 

owned

Message cité 1 fois
Message édité par ukyo81 le 27-09-2005 à 17:50:42
n°1209013
masklinn
í dag viðrar vel til loftárása
Posté le 27-09-2005 à 17:55:44  profilanswer
 


Ben non, educated [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1209017
sielfried
Posté le 27-09-2005 à 17:57:39  profilanswer
 

Code :
  1. return $this->getStatus() == "clever"

, tant qu'à faire.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1209044
masklinn
í dag viðrar vel til loftárása
Posté le 27-09-2005 à 18:13:44  profilanswer
 

Ah, au fait, question con (parce que c'est du PHP, donc la réponse va être non), mais... le PHP5... il n'y a pas de propriétés plutôt que ces getters/setters immondes [:petrus dei]
 
et puis pourquoi que "status" c'est pas tout simplement un booléen? trop facile?
 
Edit: et puis en fait, vu que "status" est basé sur le QI et qu'on stocke le QI, quel est l'intérêt de cette redondance d'information [:petrus dei]
 
EEdit: Et pourquoi tu as mis un nom par défaut aux étudiants alors que c'est leur identifiant [:petrus dei]
Pas de nom par défaut, et une explosion de caca si tu oublies d'en donner un me semble normal, et accessoirement un QI par défaut à 0 alors qu'il faut être mort pour avoir ça, voilà quoi, mets plutôt un QI moyen (100 quoi, enfin 98 pour la France, 100 pour la Belgique et 97 pour le Canada d'après des stats à la con de 2005)

Message cité 1 fois
Message édité par masklinn le 27-09-2005 à 18:21:07

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1209234
FlorentG
Unité de Masse
Posté le 27-09-2005 à 22:06:53  profilanswer
 

Y'a des méthodes magiques __get et __set, mais c'est assez chelou dans l'implémentation [:johneh] D'ailleurs je sais pas si c'est pareil [:johneh]
 
Bref, .NET rulez avec ses propriétés

n°1209289
masklinn
í dag viðrar vel til loftárása
Posté le 27-09-2005 à 22:52:26  profilanswer
 

FlorentG a écrit :

Y'a des méthodes magiques __get et __set, mais c'est assez chelou dans l'implémentation [:johneh] D'ailleurs je sais pas si c'est pareil [:johneh]


Ca a l'air de ressembler à des propriétés, genre implémentées de la manière la plus crade possible [:petrus75]
 
Genre ça fait regretter Java, c'est pour dire [:petrus75]
 
Mais quel bande de sacs à merde chez Zend :sweat:  

Citation :

Bref, .NET rulez avec ses propriétés


 [:gratgrat]  
 
J'veux pas être méchant mais... comment dire... ils ont franchement rien inventé hein... et la syntaxe des propriétés en Ruby est largement plus propre vu que l'intégralité de l'accès aux membres est basé dessus [:petrus75]
 
Pour le moment, j'ai pas encore vu plus propre et mieux foutu que les properties Ruby [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1209307
omega2
Posté le 27-09-2005 à 23:11:37  profilanswer
 

FlorentG a écrit :

Bref, .NET rulez avec ses propriétés

Je commence l'asp.net et heu .... ca me semble vraiment mal foutus. C'est certe un langage objet, mais pour le moment, j'ai l'impression de jouer aux dominos avec et non pas de faire de la programmation.
MAis bon, ceci dit, le .net est prometteur, domage que ca ai été aussi mal implémenté en asp.

mood
Publicité
Posté le 27-09-2005 à 23:11:37  profilanswer
 

n°1209325
FlorentG
Unité de Masse
Posté le 27-09-2005 à 23:18:44  profilanswer
 

masklinn a écrit :

J'veux pas être méchant mais... comment dire... ils ont franchement rien inventé hein... et la syntaxe des propriétés en Ruby est largement plus propre vu que l'intégralité de l'accès aux membres est basé dessus [:petrus75]


Gné ? Tu veux dire qu'on ne peut accéder à des membres qu'avec des propriétés ?

n°1209326
masklinn
í dag viðrar vel til loftárása
Posté le 27-09-2005 à 23:19:16  profilanswer
 

omega2 a écrit :

Je commence l'asp.net et heu .... ca me semble vraiment mal foutus. C'est certe un langage objet, mais pour le moment, j'ai l'impression de jouer aux dominos avec et non pas de faire de la programmation.
MAis bon, ceci dit, le .net est prometteur, domage que ca ai été aussi mal implémenté en asp.


L'ASP.Net c'est pas un langage hein [:petrus75]
 
L'ASP.Net, c'est juste un framework, rien à voir avec l'ASP originel. Il met à disposition un certain nombre d'objets et de modules pour la création et la gestion de sites, mais ensuite tu peux coder avec n'importe quel langage basé sur le CLR (la machine virtuelle .Net), VB.Net, C# ou même des trucs implémentés par la suite et non microsoft comme IronPython.

FlorentG a écrit :

Gné ? Tu veux dire qu'on ne peut accéder à des membres qu'avec des propriétés ?


Ouaip, sauf qu'au lieu d'être cons ils ont géré ça de deux manières (enfin il, Matz).
 
Tout d'abord, il faut savoir qu'en Ruby il y a énormément de "sucre syntactique", et que c'est un langage dont les racines lexicales viennent de Perl (non, partez pas [:dugnou29] )
 
En lisible et utilisable quoi :o
 
Donc l'une des caractéristiques de Ruby, c'est qu'on utilise jamais de "this" ou de "self", de l'intérieur de l'objet les membres sont préfixés par "@".
 
Par exemple pour mon objet foo avec un membre bar
 

class Foo
    def initialize # fonction équivalent aux constructeurs
        @bar = "foobar"
        @baz = "chocomielpops"
    end
end


Mais ici, comme en C++ (si j'me plante pas [:gratgrat]) et à l'opposée de Python un membre est par défaut privé, et il le reste.
 
Première chose, pour permettre son accès en lecture et/ou en écriture, on le fait explicitement, en précédant son nom de ":" pour montrer l'accesseur, et en utilisant les propriétés "attr_writer" (write only) et attr_accessor (r/w). A noter qu'on file à ces propriétés des listes d'attributs

class Foo
    attr_reader :bar, :baz # je passe les deux en read
end
 
class Foo # En ruby, une classe n'est jamais fermée, on la rouvre quand on veut :o
    attr_accessor :bar # bar en R/W
    attr_writer :baz # et baz en write
end


 
Ces propriétés vont en fait créer des accesseurs de base (invisibles d'ailleurs) du type

class Foo
    def bar # propriété en lecture = getter
        @bar # une fonction ruby rend sa dernière évaluation
    end
    def bar=(val) # propriété en écriture = setter
        @bar = value
    end
end
 
f = Foo.new # on instancie
f.bar
> "foobar"
f.bar = "foo"
> foo
f.bar
> "foo"


Tout simplement.
 
Donc oui on ne peut accéder aux membres que via des propriétés, mais ça a été suffisament bien fait pour être très proprement intégré au langage et facile à utiliser


Message édité par masklinn le 27-09-2005 à 23:35:18

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1209327
FlorentG
Unité de Masse
Posté le 27-09-2005 à 23:19:19  profilanswer
 

omega2 a écrit :

Je commence l'asp.net et heu .... ca me semble vraiment mal foutus. C'est certe un langage objet, mais pour le moment, j'ai l'impression de jouer aux dominos avec et non pas de faire de la programmation.
MAis bon, ceci dit, le .net est prometteur, domage que ca ai été aussi mal implémenté en asp.


Tout dépend comment tu fais ça... Aussi, moi j'utilise .Net pour des vraies appli, à essayer ;)

n°1212055
Aschrack
Vive Pen²
Posté le 30-09-2005 à 18:46:21  profilanswer
 

masklinn a écrit :

Ah, au fait, question con (parce que c'est du PHP, donc la réponse va être non), mais... le PHP5... il n'y a pas de propriétés plutôt que ces getters/setters immondes [:petrus dei]
 
et puis pourquoi que "status" c'est pas tout simplement un booléen? trop facile?
 
Edit: et puis en fait, vu que "status" est basé sur le QI et qu'on stocke le QI, quel est l'intérêt de cette redondance d'information [:petrus dei]
 
EEdit: Et pourquoi tu as mis un nom par défaut aux étudiants alors que c'est leur identifiant [:petrus dei]
Pas de nom par défaut, et une explosion de caca si tu oublies d'en donner un me semble normal, et accessoirement un QI par défaut à 0 alors qu'il faut être mort pour avoir ça, voilà quoi, mets plutôt un QI moyen (100 quoi, enfin 98 pour la France, 100 pour la Belgique et 97 pour le Canada d'après des stats à la con de 2005)


lol

Citation :

je tente actuellement d'apprendre le php et au cours de mes différents test d'apprentissage, j'ai créé cette classe (qui en soit, n'a ni intérêt, ni objectif autre que de tester l'implémentation d'une classe en php et d'en faire l'utilisation)


 
edit : en d'autres termes y'a aucune logique ici, jfaisais juste des tests. la valeur de QI aurait pu être "caribou" le nom de la classe cendrier et les fonctions hypopotame1 et 2. Donc que ce soit joliment programmé ou non, que ce soit logique, etc... n'a aucun sens ici. Je suis juste occupé à analyser la syntaxe de php sans plus. (vous vous prenez vraiment la tête pour rien  [:king diamond]  [:wipeout_tt] )


Message édité par Aschrack le 30-09-2005 à 18:49:59

---------------
Je viens d'apprendre que les ventes de voitures ont encore baissé de 7% en France. Y'en a marre de ces pirates qui téléchargent les voitures sur internet ! (antp était prems et est admin) - "Le travail est l'opium du peuple et je ne veux pas mourir dr

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Php][Classe][Debutant] hum, où est l'erreur dans ma classe?

 

Sujets relatifs
[MYSQL] Incrémentation comme avec le PHP ou le C[Delphi] erreur Constructor - Inherited.
ouvrir un fichier protégé via Http avec une fonction PHP[ debutant ] String
[Débutant] Lancer des fonctions simultanémentPHP/MySQL : Performances
debutant...lien sur site qui ouvre wmp pour visionner une video[PHP Compilé pr ligne de commande] Comment demander une entrée de l'..
Erreur Javascript - Webmail neuf telecom(noob)Site en include et erreur 404...
Plus de sujets relatifs à : [Php][Classe][Debutant] hum, où est l'erreur dans ma classe?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR