Remarque : Il s'agit d'une question de référence traitant de la portée des variables en PHP. Veuillez fermer l'une des nombreuses questions qui correspondent à ce modèle en tant que doublon de cette question.
Qu'est-ce que la « portée variable » en PHP ? Les variables d'un fichier .php sont-elles accessibles dans un autre fichier .php ? Pourquoi est-ce que j'obtiens parfois des erreurs"variable non définie"?
Bien que les variables définies dans la portée d'une fonction ne soient pas accessibles de l'extérieur, cela ne signifie pas que vous ne pouvez pas utiliser leurs valeurs une fois la fonction terminée. PHP possède un
static
关键字,在面向对象的 PHP 中广泛用于定义静态方法和属性,但应该记住static
bien connu qui peut également être utilisé pour définir des variables statiques à l'intérieur de fonctions.Qu'est-ce qu'une « variable statique » ?
Les variables statiques sont différentes des variables ordinaires définies dans la portée de la fonction. Les variables statiques ne perdront pas leur valeur lorsque l'exécution du programme quitte la portée. Considérons l'exemple suivant utilisant des variables statiques :
Résultat :
Si nous définissons
$counter
没有static
那么每次回显的值将与传递给函数的$num
参数相同。使用static
, nous pouvons construire ce compteur simple sans solutions de contournement supplémentaires.Cas d'utilisation des variables statiques
Conseils
Les variables statiques n'existent que dans la portée de la fonction locale. ça ne peut pas être Accessible en dehors de la fonction dans laquelle il est défini. afin que vous puissiez Assurez-vous qu'il conservera sa valeur jusqu'au prochain appel Cette fonction.
Les variables statiques ne peuvent être définies que comme scalaires ou scalaires Expressions (depuis PHP 5.6). lui attribuer forcément d'autres valeurs Ce qui aboutit à un échec, du moins au moment d’écrire ces lignes. Cependant, vous pouvez le faire sur la ligne de code suivante :
Résultat :
Les fonctions statiques sont quelque peu "partagées" entre les méthodes de l'objet Camarades de classe. C’est facile à comprendre en regardant l’exemple ci-dessous :
Cela ne fonctionne que pour les objets de la même classe. Les variables statiques se comporteront comme prévu si les objets appartiennent à des classes différentes (ou même s'étendent les uns les autres).
Les variables statiques sont-elles le seul moyen de conserver les valeurs entre les appels de fonction ?
Une autre façon de préserver les valeurs entre les appels de fonction consiste à utiliser des fermetures. Les fermetures ont été introduites dans PHP 5.3. En bref, ils vous permettent de restreindre l'accès à un certain ensemble de variables dans le cadre d'une fonction à une autre fonction anonyme, qui sera le seul moyen d'y accéder. Être à l'intérieur d'une variable de fermeture peut émuler (plus ou moins avec succès) des concepts POO tels que les "constantes de classe" (si elles sont transmises par valeur dans la fermeture) ou les "propriétés privées" (si transmises par référence) dans la programmation structurée.
Ce dernier permet en fait d'utiliser des fermetures au lieu de variables statiques. C'est toujours au développeur de décider quoi utiliser, mais il convient de mentionner que les variables statiques sont certainement utiles lors de l'utilisation de la récursivité et méritent l'attention du développeur.
Qu'est-ce que la « portée variable » ?
Les variables sont limitées dans leur « portée » ou « où elles sont accessibles ». Ce n'est pas parce que vous avez écrit
. La variable$foo = 'bar';
une foisquelque partdans votre application que vous pouvez référencer$foo
depuis$foo = 'bar';
一次,并不意味着您可以从引用$foo
>应用程序内的其他地方。变量$foo
>Ailleurs dans l'application$foo
a une certaine portée dans laquelle elle est valide, et seul le code dans la même portée peut accéder à la variable. Comment définir la portée en PHP ?C'est très simple : PHP a desétendues de fonctions. C'est le seul délimiteur de plage présent en PHP. Les variables à l'intérieur d'une fonction ne sont disponibles qu'à l'intérieur de cette fonction. Les variables en dehors d'une fonction peuvent être utilisées n'importe où en dehors de la fonction, mais ne peuvent pas être utilisées dans une fonction. Cela signifie qu'il existe une portée spéciale en PHP : la portéeglobale
. Toute variable déclarée en dehors de toute fonction se trouve dans cette portée globale. Exemple :