dans php, quelle est la différence entre: p>
Je sais comment ils peuvent être utilisés, mais je ne peux pas distinguer clairement entre eux. P>
7 Réponses :
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 As comme pour $ i ++ code> où
$ i code> est
statique code> statique. p>
Extension d'une classe et créer son objet CODE>, il est appelé héritage, consultez ce message pour en savoir plus sur: P>
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. P>
Deuxième question - ce sont des choses complètement autres. En savoir plus sur la programmation orientée objet (non seulement dans PHP) P>
statique est pour: p>
Propriétés ou méthodes de classe comme statique les rend accessibles sans avoir besoin d'une instanciation de la classe p> blockQuote>
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. P>
constantes valeur: p>
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. P> blockQuote>
Donc, il renvoie toujours le même résultat lorsque vous l'appelez p>
À 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: p>
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. P> blockQuote>
J'espère que ça vous aide. P>
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). p>
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 } }
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 }
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 }
Pas besoin d'initialiser quand déclarer. P>
self::variable_name = "cannot change"; //produce a parse error
Les règles de déclaration variable normales appliquées (ex: commence par $) p> li>
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;
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 B> avoir: privé const my_constant = "valeur constante"; code>.
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...'
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. P>
Je ferais d'abord référence à PHP et à OO Docs parce que ce sont des questions très fondamentales.