appel de la fonction d'une classe

Petit nouveau ! | 5 Messages

13 oct. 2010, 17:22

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

Mammouth du PHP | 19672 Messages

13 oct. 2010, 17:35

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();
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 5462 Messages

13 oct. 2010, 17:36

ça dépend, si tas besoin du static ou pas c'est pas la même utilisation

Eléphant du PHP | 314 Messages

13 oct. 2010, 17:40

Quelle différence niveau performance, utilisation de mémoire ?
Cordialement,
Julien - http://laravel.fr/

Mammouth du PHP | 19672 Messages

13 oct. 2010, 17:53

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 5 Messages

13 oct. 2010, 18:10

merci pour mes réponses