OVH Cloud OVH Cloud

[débutant]: création d'objets

4 réponses
Avatar
Dorian
Bonjour,

j'ai une petite question concernant la construction d'objets.
Il semblerait que pour créer un objet r_point de la classe Point:
$r_point=Point->new()
passe bien le nom de la classe comme premier paramètre au constructeur
alors que:
$r_point=Point::new() ne le fasse pas.
Est-ce normal ? je pensais que ces deux notations étaient équivalentes.

4 réponses

Avatar
Alex Marandon
In article <bhl0g8$16o$, Dorian wrote:
Bonjour,

j'ai une petite question concernant la construction d'objets.
Il semblerait que pour créer un objet r_point de la classe Point:
$r_point=Point->new()
passe bien le nom de la classe comme premier paramètre au constructeur
alors que:
$r_point=Point::new() ne le fasse pas.
Est-ce normal ?


Oui.

je pensais que ces deux notations étaient équivalentes.


Tu t'es rendu compte par toi même que non. "::" sert pour indiquer
l'espace de nommage d'un symbole (fonction, scalaire, etc.) ou sert à
représenter un séparateur de répertoire de manière portable lors d'un
use. "->" sert à appeler des méthodes de classe ou d'objet ou bien à
accéder à des enregistrements d'array ou de hash via une référence.

Les perldoc expliquent tout ça.

Avatar
Dorian
In article <bhl0g8$16o$, Dorian wrote:

Bonjour,

j'ai une petite question concernant la construction d'objets.
Il semblerait que pour créer un objet r_point de la classe Point:
$r_point=Point->new()
passe bien le nom de la classe comme premier paramètre au constructeur
alors que:
$r_point=Point::new() ne le fasse pas.
Est-ce normal ?



Oui.


je pensais que ces deux notations étaient équivalentes.



Tu t'es rendu compte par toi même que non. "::" sert pour indiquer
l'espace de nommage d'un symbole (fonction, scalaire, etc.) ou sert à
représenter un séparateur de répertoire de manière portable lors d'un
use. "->" sert à appeler des méthodes de classe ou d'objet ou bien à
accéder à des enregistrements d'array ou de hash via une référence.

Les perldoc expliquent tout ça.


Donc $r_point=Point->new() appelle la méthode new() de la classe Point
et affecte à $r_point la référence du nouvel objet alors que
$r_point=Point::new() appelle la fonction new du package Point et
affecte à $r_point la référence de la nouvelle table de hashage ?
L'une est pour la POO et l'autre non ?


Avatar
Alex Marandon
In article <bia6c7$ff6$, Dorian wrote:
Donc $r_point=Point->new() appelle la méthode new() de la classe Point
et affecte à $r_point la référence du nouvel objet alors que
$r_point=Point::new() appelle la fonction new du package Point et
affecte à $r_point la référence de la nouvelle table de hashage ?


La seule différence entre les deux, c'est que Point->new() passe
implicitement en premier argument la chaine 'Point'. Cela permet
d'utiliser la forme à deux arguments de bless(), laquelle doit être
utilisée si on veut faire une classe héritable.

L'une est pour la POO et l'autre non ?


En l'occurence, si on ne veux pas faire d'héritage, les deux sont
acceptables, mais autant prendre la bonne habitude et utiliser "->".

Avatar
Dorian
In article <bia6c7$ff6$, Dorian wrote:

Donc $r_point=Point->new() appelle la méthode new() de la classe Point
et affecte à $r_point la référence du nouvel objet alors que
$r_point=Point::new() appelle la fonction new du package Point et
affecte à $r_point la référence de la nouvelle table de hashage ?



La seule différence entre les deux, c'est que Point->new() passe
implicitement en premier argument la chaine 'Point'. Cela permet
d'utiliser la forme à deux arguments de bless(), laquelle doit être
utilisée si on veut faire une classe héritable.


L'une est pour la POO et l'autre non ?



En l'occurence, si on ne veux pas faire d'héritage, les deux sont
acceptables, mais autant prendre la bonne habitude et utiliser "->".


Ok merci, c'est plus clair.