Constructeur et attributs d'une classe

Petit nouveau ! | 3 Messages

27 avr. 2010, 22:51

Bonjour,

lors de la déclaration d'une classe :

Est-on obligé de déclarer tous les attributs que l'on va utiliser au début de la classe ?

Y a-t-il obligatoirement une méthode "constructeur" ?
Si oui, la première méthode déclarée est-elle forcément la méthode "constructeur" ?

Merci

ViPHP
ViPHP | 928 Messages

28 avr. 2010, 10:42

Bonjour,
il suffit de lire les tutoriels les plus basiques sur la programmation objet en PHP pour avoir ta réponse ;)

Le constructeur est définit si tu créés une méthode qui s'appelle __construct().

Et sinon non il n'est pas nécessaire de déclarer tous les attributs que tu vas utiliser, tu peux très bien faire :
class MyClass
{
   public function myMethod()
   {
      $this->unAttributQuiNExistePas = 42;
   }
}
C'est juste plus propre de les déclarer, histoire de ne pas se perdre dans son code et de se demander d'où sort tel ou tel attribut.

Petit nouveau ! | 3 Messages

28 avr. 2010, 12:24

Ok merci pour la réponse !

Pour les attributs, je n'ai jamais lu dans aucun tuto (pourtant j'en ai lu une dizaine différentes) quel était l'intérêt de déclarer les attributs et si cela était obligatoire. Je suis conscient que c'est plus propre. Mais est-ce vraiment mal de ne pas les déclarer ? Ca allégerait la lecture de la classe ? non ?

Par ailleurs, pour le __construct j'étais au courant ! Dans certains tutos, il est dit que la méthode constructeur devait porter le même nom que la classe.
Parfois , la première méthode n'a ni le nom de la classe et n'est pas non plus appelé "__construct" donc (comme dans ton exemple ci-dessus), je me demandais si la première méthode est à TOUT LES COUPS la méthode constructeur ?

Enfin, on peut tout à fait imaginer une classe sans méthode constructeur, non ? Je suis débutant, merci d'être indulgent !!!

ViPHP
ViPHP | 928 Messages

28 avr. 2010, 12:47

Pour les constructeurs, dans PHP4 ils devaient porter le même nom que la classe. Cette syntaxe est toujours supportée pour des raisons de compatibilité, mais il ne faut plus le faire, et utiliser __construct() plutôt (qui est prioritaire). Ce sont les seuls moyens d'appeler un constructeur, sachant qu'une classe peut très bien ne pas en avoir :)

ViPHP
ViPHP | 3300 Messages

01 mai 2010, 19:48

Ok merci pour la réponse !
Pour les attributs, je n'ai jamais lu dans aucun tuto (pourtant j'en ai lu une dizaine différentes) quel était l'intérêt de déclarer les attributs et si cela était obligatoire. Je suis conscient que c'est plus propre. Mais est-ce vraiment mal de ne pas les déclarer ? Ca allégerait la lecture de la classe ? non ?
un attributs non déclaré est publique à son initialisation, donc tu te prives de pouvoir faire ce qu'on appelle de la sécurité de programmation (protected/private/public), qui plus est tu forces le moteur de php à passer ta variables en public au lieu de l'avoir explicitement, c'est certes pas grand chose en terme de perf, mais c'est avec des petits riens qu'on fait du performant.
Fait du php depuis que ca existe ou presque :)

Petit nouveau ! | 3 Messages

01 mai 2010, 22:38

un attributs non déclaré est publique à son initialisation, donc tu te prives de pouvoir faire ce qu'on appelle de la sécurité de programmation (protected/private/public), qui plus est tu forces le moteur de php à passer ta variables en public au lieu de l'avoir explicitement, c'est certes pas grand chose en terme de perf, mais c'est avec des petits riens qu'on fait du performant.
ok, merci ! Mais si justement mes attributs sont tous publiques, je n'ai donc pas besoin de les initialiser ?

ViPHP
ViPHP | 3300 Messages

02 mai 2010, 09:24

un attributs non déclaré est publique à son initialisation, donc tu te prives de pouvoir faire ce qu'on appelle de la sécurité de programmation (protected/private/public), qui plus est tu forces le moteur de php à passer ta variables en public au lieu de l'avoir explicitement, c'est certes pas grand chose en terme de perf, mais c'est avec des petits riens qu'on fait du performant.
ok, merci ! Mais si justement mes attributs sont tous publiques, je n'ai donc pas besoin de les initialiser ?
si, c'est mieux dans 100% des cas qu'ils soient tous destinés à être public ou pas, parceque comme je l'ai expliqué, quand php parse ton code et qu'il rencontre quelquechose qui nécessite qu'il "déduise" ce qu'il faut faire, ca lui prend plus de temps que si tu lui dis quoi faire de façon explicite.
Fait du php depuis que ca existe ou presque :)