Explication du mot-clé static

Rechercher

Explication du mot-clé static

Par lvarez  -  6 reponses  -  Le 20/10/2008 12:42  -  Editer  - 

Bonjour (non optionel)

J'aimerais savoir à quoi sert concrétement la directive static, moi avec les explications sur le net je serais tenter de mettre tout en static.

Plus besoin d'instancié une class.

Peut-on m'eclairer !

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 20/10/2008 18:39  -  Haut de page  - 

En ne faisant plus aucune instanciation de classe, autant faire directement tout en procédural, la POO devient alors sans intérêt etdonc écrire des collections de fonctions sous forme de classes n'a plus de sens.

Et c'est bien ce que tu as compris : la directive static permet de s'affranchir de l'instanciation pour accéder à une propriété ou une méthode de classe. Mais peut-être qu'en élaborant un peu autour de ton idée générale on pourrait t'apporter une réponse plus appropriée...

 
Par Emacs  -  Le 21/10/2008 09:50  -  Haut de page  - 

Bonjour Ivarez,

Le mot-clé static te permet d'appeler des attributs ou des méthodes qui n'appartiennent pas à l'instance (objet). Dans le cadre des méthodes, on utilise le mot-clé static pour écrire une méthode qui ne sera pas appelée sur l'objet lui même mais qui sera appelée en dehors du contexte d'instance pour réaliser une tâche. Une méthode statique est en réalité une simple fonction utilisateur. Par exemple, les deux codes ci-dessous font exactement la même chose :

<?php
function sayHello($name)
{
  return 'Hello '. $name;
}
class SayHelloTools
{
  public static function($name)
  {
    return 'Hello '. $name;
  }
}
// Appels
echo sayHello('Hugo');                 // Renvoie "Hello Hugo"
echo SayHelloTools::sayHello('Hugo');  // Renvoie "Hello Hugo"

On utilise les méthodes statiques dans certains patrons de conception comme le singleton ou bien la factory pour des appels qui ne concerne pas le contexte d'instance.

Quant aux attributs statiques d'une classe, ils servent à partager une information dans tous les objets issus de cette même classe. On appelle les attributs statiques des variables de classe car elles dépendent de la classe et non de l'objet.

Prenons un exemple simple avec la classe suivante qui contient un membre statique et un membre non statique. Le membre statique dépendra de l'instance.

<?php
class MonObjet
{
  public static $monAttributStatique = 5;
  public $monAttributInstance = 10;
  public function __construct() { }
  public function getAttributStatic() { return self::$monAttributStatique; }
}

Créeons deux objets et voyons ce qu'il se passe :

<?php
$obj1 = new MonObjet();
$obj2 = new MonObjet();

Nous avons là deux objets distincts. Nous allons fixer les deux propriétés pour chaque objet.

 

<?php
echo MonObjet::$monAttributStatique;     // Affiche 5
echo $obj1->getAttributStatic();         // Affiche 5
echo $obj2->getAttributStatic();         // Affiche 5
// Fixation des valeurs $obj1
echo $obj1->monAttributStatique = 12;
echo $obj1->monAttributStatique;         // Affiche 12
// Fixation des valeurs $obj2
echo $obj2->monAttributStatique = 25;
echo $obj2->monAttributStatique;         // Affiche 25
// Fixation attribut statique
MonObjet::$monAttributStatique = 78;
echo MonObjet::$monAttributStatique;     // Affiche 78
echo $obj1->getAttributStatic();         // Affiche 78
echo $obj2->getAttributStatic();         // Affiche 78

Ainsi tu vois bien que l'attribut statique ne dépend pas de l'objet mais bien de la classe. Si on le modifie, il est modifié pour chaque objet car il appartient bien à la classe elle même et non à l'instance (objet).

++

 
Par lvarez  -  Le 29/10/2008 12:02  -  Haut de page  - 

Bonjour à tous,

Merci pour ces bonnes explications, je vois plus clair maintenant, j'aimerais vous soummettre un code cependant ca ne marche pas, faut il faire une manipulation spéciale ?

 
Par Cyrano  -  Le 29/10/2008 18:52  -  Haut de page  - 

Salut Ivarez,

dans la barre d'outils du formulaire de saisie du message, tu as une petite icône ("****", à droite) qui va ouvrir une boite de dialogue pour coller ton code dedans. Utilise le bouton de pré-visualisation en bas du formulaire pour vérifier ce que ça donne avant de poster ;)

Exemple :

<?php
function maFonction()
{
    return true;
}
?>

 

 

 
Par lvarez  -  Le 31/10/2008 16:41  -  Haut de page  - 

mais justement ca ne fonctionne pas ca ne colle aucun code dans la page !!!!

 
Par Cristian  -  Le 16/08/2009 22:12  -  Haut de page  - 

Salut,

Merci Emacs, j'ai lu à plusieur reprise le manuel et j'ai rien compris. Là tout est devenue beaucoup plus claire.

 

Une autre question sur les méthodes statiques, à quoi elles servent, dans l'exemple suivant qu'une methode qu'elle soit statique ou non, le resultat retourné est toujours le même :

<?phpclass MaClass  {   public function fonctionNormal()    {echo "Fonction Normal\n";}   public static function fonctionStatic()    {echo "Fonction Static\n";}   } MaClass::fonctionNormal();  // retourn 'Fonction Normal'MaClass::fonctionStatic();  // retourn 'Fonction Static' $Test = new MaClass;$Test->fonctionNormal();  // retourn 'Fonction Normal'$Test->fonctionStatic();  // retourn 'Fonction Static'?>

 

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |