Page 1 sur 1

appel de la fonction d'une classe

Posté : 13 oct. 2010, 17:22
par ginola57
Bonjour à tous,

Je me pose une question sur les classes.

je souhaite appeler une fonction d'une classe. Pour cela je créé une instance de la classe avec new puis j'appelle cette fonction.

J'hésite entre 2 possibilités :

nom_de_mon_instance::nom_de_la_fonction();

ou

nom_de_mon_instance->nom_de_la_fonction();

Quelle est la meilleure solution ?

Merci

Re: appel de la fonction d'une classe

Posté : 13 oct. 2010, 17:35
par Cyrano
Il n'y a pas de meilleure ou de moins bonne solution, il n'y a qu'une méthode appropriée selon le type.

Premier point, en POO on ne parle pas de fonctions mais de méthodes.
Ensuite, selon qu'une méthode est ou non statique, on utilisera l'opérateur approprié :
- « :: » pour appeler une méthode statique;
- « -> » pour l'appel à une métode normale.

La principale différence est qu'une méthode statique peut être invoquée en dehors d'une instance de la classe contrairement aux autres méthodes.

Illsutration sommaire :
<?php
class maClasse {
    public function maMethodeNormale() {
        //... instructions ...
    }
    
    public static function maMethodeStatique()
    {
        // ... instructions ...
    }
}
// Utilisation :
$appelStatique = maClasse::maMethodeStatique();

$instance = new maClasse();
$appelNormal = $instance->maMethodeNormale();

// Également valide, l'appel d'une méthode statique à partir d'une instance, mais c'est largement moins utilisé :
$appelStatique2 = $instance::maMethodeStatique();

Re: appel de la fonction d'une classe

Posté : 13 oct. 2010, 17:36
par stealth35
ça dépend, si tas besoin du static ou pas c'est pas la même utilisation

Re: appel de la fonction d'une classe

Posté : 13 oct. 2010, 17:40
par AoSiX
Quelle différence niveau performance, utilisation de mémoire ?

Re: appel de la fonction d'une classe

Posté : 13 oct. 2010, 17:53
par Cyrano
Quelle différence niveau performance, utilisation de mémoire ?
Je crains que la questions ne soit pas pertinente : comme je l'ai expliqué plus haut, on appelle pas une méthode de classe n'importe comment : si elle est statique, on l'appelle alors avec le « :: » sinon, on doit utiliser le « -> »

Appeler une méthode normale avec le « :: » peut fonctionner mais génère une erreur si la méthode n'est pas explicitement déclarée comme statique. Par ailleurs, je dirais que ce n'est pas tant une question de mémoire que d'architecture logicielle : on ne crée pas inutilement une méthode statique pour simplifier les appels, on le fait parce que c'est nécessaire. Dans un singleton par exemple, devra obligatoirement passer par une méthode statique pour récupérer une instance puisque le constructeur sera privé. Sinon, on pourra aussi avoir dans un coin une classe de méthodes utilitaires qu'on déclarera statiques parce que l'instance n'apporte rien et pour la cohérence d'ensemble du code si on fait de la POO au lieu d'avoir un fichier en procédural.

Re: appel de la fonction d'une classe

Posté : 13 oct. 2010, 18:10
par ginola57
merci pour mes réponses