10
votes

PHP OOP - Variables statiques VS constantes?

dans php, quelle est la différence entre:

  1. constantes et variables statiques?
  2. Extension d'une classe et créer son objet?

    Je sais comment ils peuvent être utilisés, mais je ne peux pas distinguer clairement entre eux.


1 commentaires

Je ferais d'abord référence à PHP et à OO Docs parce que ce sont des questions très fondamentales.


7 Réponses :


6
votes

Une constante est constante et ne peut pas changer sa valeur une fois attribuée. Une variable statique, d'autre part, peut avoir des valeurs variables. Par exemple, vous pouvez créer une variable statique à l'intérieur d'une fonction pour savoir combien de temps la fonction a été appelée. La valeur sera changer chaque fonction de temps est appelée par exemple si vous faites si vous faites $ i ++ $ i est statique statique.

As comme pour Extension d'une classe et créer son objet , il est appelé héritage, consultez ce message pour en savoir plus sur:


0 commentaires

1
votes

La variable constante est une variable accessible par nom de classe et ne peut pas être modifiée pendant l'exécution du script. La variable statique de classe est également accessible par nom de classe mais peut être modifiée lors de l'exécution du programme.

Deuxième question - ce sont des choses complètement autres. En savoir plus sur la programmation orientée objet (non seulement dans PHP)


0 commentaires

12
votes

statique est pour:

Propriétés ou méthodes de classe comme statique les rend accessibles sans avoir besoin d'une instanciation de la classe

Donc, la valeur renvoyée par un membre statique peut différer. Par exemple, vous pouvez appeler une méthode statique avec un résultat différent en fonction des paramètres que vous transmettez.

constantes valeur:

doit être une expression constante, non (par exemple) une variable, une propriété, résulte d'une opération mathématique ou d'un appel de fonction.

Donc, il renvoie toujours le même résultat lorsque vous l'appelez

À propos de créer un objet et d'étendre une classe, lorsque vous "créer un objet", vous faites une instance de une classe . Lorsque vous étendre une classe , vous créez une autre classe qui:

hérite de toutes les méthodes publiques et protégées de la classe mère. Sauf si une classe remplace ces méthodes, elles conserveront leur fonctionnalité d'origine.

J'espère que ça vous aide.


0 commentaires

0
votes

La raison pour laquelle vous souhaiteriez utiliser une variable / fonction de membre statique est que vous pouvez extraire des informations sur cette classe sans avoir besoin de la créer d'une instance (ce qui vous coûte moins de calcul de la CPU).


0 commentaires

29
votes

comparaison

statique h3>
  1. peut avoir un modificateur d'accès. P>

        class A{
    
            public static $public_static = "can access from anywhere";
            protected static $protected_static = "can access from inheriting classes";
            private static $private_static = "can access only inside the class";
            
            const my_constant = "Constant value";
        }
    
        class B extends A{
    
            function output(){
    
                // you can use self or static
    
                echo self::$public_static; //can access from anywhere;
                echo self::$protected_static; //can access from inheriting classes;
                self::$protected_static = "Changed value from Class B";
                echo self::$protected_static; //"Changed value from Class B";
                
                echo self::$private_static; //Produce Fatal Error
    
                echo self::my_constant;//Constant value
            }
        }
    
  2. Selon la visibilité, vous pouvez accéder aux variables statiques. P>

     class A{
        const my_constant = "constant value";// Fine
        const $wrong_constant="wrong";// produce a parse error
    }
    
  3. peut changer la valeur après la déclaration. p>

    class A{
        const my_constant = "constant value";// Fine
        const wrong_constant;// produce a parse error
    }
    
  4. Pas besoin d'initialiser quand déclarer. P>

    self::variable_name = "cannot change"; //produce a parse error
    
  5. Les règles de déclaration variable normales appliquées (ex: commence par $) p> li>

  6. peut créer à l'intérieur d'une fonction. p>

    //inside the class
        self::variable_name;
        static::variable_name;
    //outside the class
        class_name::variable_name;
    


4 commentaires

6. Comparait des pommes avec des oranges car les variables statiques locales ne sont pas identiques à des propriétés de classe statiques (ou constantes). Ils n'existent que dans cette fonction / méthode.


Impossible d'utiliser des constantes d'objets? (au lieu de la classe)


Vous ne pouvez pas accéder aux constantes extérieures aux cours


Veuillez noter que les modificateurs d'accès PHP7.1 sont autorisés pour les constantes, donc une peut avoir: privé const my_constant = "valeur constante"; .



3
votes

Une différence importante est en répartition de la mémoire.

Lorsqu'une instance d'une classe (objet) est créée, la mémoire est attribuée à l'objet nouvellement créé. Le nom statique est après la nature de la répartition de la mémoire. C'est-à-dire que la mémoire des objets statiques n'est attribuée qu'une fois, statiquement. Lorsqu'un objet change sa propriété statique, elle réfléchit à tous les objets de la même classe. P>

<?php
class Test {
    static $test = "world!";
    static function hello() {
        echo "\nhello " . self::$test . "\n";
    }
}

$t = new Test();
$x = new Test();

$t->hello(); // prints 'hello world!'
$t::$test = "Hmmm...";
$t->hello(); // prints 'hello Hmmm...'
$x->hello(); // prints 'hello Hmmm...'


0 commentaires

-1
votes

La variable constante est séparée pour chaque objet. Mais la variable statique est courante pour tous les objectifs de cette classe. Chaque objet partage une seule variable statique. Variable statique créée au niveau de la classe. Variable constante créée en niveau d'instance.


0 commentaires