10
votes

PHP -Quelle est la différence entre les variables globales et les constantes

Selon de nombreuses sources, register_globals (variables globales qui est) devraient être désactivées dans votre php.ini. devrais-je écrire définir () dans mon code et utiliser des constantes si les variables globales sont désactivées? sont ceux même liés?


0 commentaires

8 Réponses :


2
votes

constantes, une fois définie, ne peut pas être modifiée.

N'utilisez pas de constantes comme variables. Si vous devez utiliser des variables dans les fonctions, passez-les dans la fonction elle-même. Utilisez tout dans la façon dont il était destiné à être utilisé. Les variables sont la variable et les constantes sont constante .


2 commentaires

Je veux utiliser des constantes pour pouvoir transmettre des noms de répertoires.


Si la valeur de répertoire ne devrait pas changer, alors par tous les moyens, utilisez une constante :)



17
votes

Ils sont liés en ce qu'ils ont une portée globale, mais les constantes sont censées ne pas changer une fois définies, contrairement aux variables globales que la page peut modifier comme elle le va. Donc, il suffit de passer à l'aide de Définir () au lieu d'un global ne vous aidera pas beaucoup.

C'est mieux si vous refactez vos méthodes pour prendre les variables comme paramètres et comptez sur cela pour passer des variables autour.


3 commentaires

Je souhaite avoir des variables pré-définies telles que les noms de répertoires qui seraient globales et accessibles partout. Je souhaite également que les variables mondiales soient désactivées. Puis-je utiliser Définir () dans ce cas?


Si vous n'avez pas l'intention de modifier la variable car la page exécute, alors oui, c'est la bonne utilisation pour définir.


@Gal, oui, c'est une bonne raison de les utiliser, car vous n'allez pas changer les annuaires au moment de l'exécution.



9
votes

Quelques choses ici.

Premièrement, les registres que vous désactivez dans votre php.ini désignent une ancienne fonctionnalité PHP où toute variable envoyée via une chaîne de requête (gêner) ou un formulaire (get / post) serait convertie en une variable PHP globale. Ceci est la fonctionnalité (et devrait être) désactivée lorsque vous désactivez le registre_globals. Même avec cela éteint, vous pouvez toujours définir des variables globales dans votre application.

en termes de programmation générale, les variables globales (non registres de PHP) sont considérées comme "mauvaises" car lorsque vous rencontrez un programmeur, vous ne savez pas quelles autres parties de l'application pourraient utiliser ou le modifier, ou quel effet votre objectif Les modifications apportées à cette mondiale pourraient avoir. De plus, si vous définissez une nouvelle variable globale, il y a une chance que vous allez écraser une variable existante que quelqu'un d'autre s'appuie sur. Lorsque des variables sont définies localement (dans une seule fonction ou dans d'autres langues, un bloc unique), vous pouvez examiner la portée locale et déterminer généralement ce qu'un changement de cette variable fera.

Les constantes, d'autre part, ne changent jamais. Vous les définissez une fois, et ils restent définis et personne ne peut les changer. C'est pourquoi la présence mondiale est considérée comme "moins mauvaise" que d'avoir des variables globales.


3 commentaires

Les constantes sont toujours mauvaises alors? Devrais-je utiliser des sessions pour transmettre des choses telles que les noms d'annuaire et tels?


Les constantes ne sont pas simplement «moins mauvais». Ils sont une chose parfaitement acceptable à utiliser dans de nombreux cas, comme ce que dit Gal de Gal sur les annuaires.


Les constantes vont bien, bien que vous puissiez trouver des arguments convaincants que vous ne devriez pas utiliser des constantes dans l'espace de noms global (c'est-à-dire que seules les constantes de classe ont été utilisées). Il n'y a pas de bonne réponse ici, seulement les réponses avec différents commerces.



8
votes

Les variables globales ne sont pas constantes (vous pouvez modifier la valeur d'une variable globale, mais vous ne pouvez définir qu'une fois une fois constante).

Les constantes ne sont pas toujours globales (vous pouvez déclarer une constante dans une classe).

En outre, les variables globales peuvent être n'importe quel type: scalaire, tableau ou objet. Les constantes ne peuvent être que des scalaires.

Je ne vais pas dire que les constantes ou les globaux sont bons ou mauvais. Lorsqu'ils sont utilisés de manière appropriée, ils ont tous deux des utilisations bénéfiques. Il existe des problèmes de sécurité autour du register_globals fonctionnalité qui sont séparés d'une utilisation plus générale des globaux.


0 commentaires

1
votes

Quelques exemples constants: xxx


0 commentaires

-1
votes

Essayez ce test simple:

filea.php: xxx

fileb.php: xxx

alors puis Exécutez FileB.PHP et vous verrez qu'avant d'inclure Filea.php, quelqueval n'est pas défini. Donc, ce que cela signifie que avant de définir quelque chose, cela ne sera pas visible pour le script.


0 commentaires

0
votes

Quelque chose d'autre à considérer - les constantes ne peuvent pas stocker de choses comme des tableaux ou des objets, alors que quelque chose de défini à $ globaux peut être n'importe quel type de variable. Donc, dans certains cas, si vous avez besoin de quelque chose pour être global, mais il ne peut pas être stocké à une constante en utilisant Définir (), vous voudrez peut-être utiliser $ globaux à la place.

aussi, register_globals et $ globaux ne sont pas la même chose!


0 commentaires

0
votes

Vous pouvez modifier la variable globale à l'intérieur de la fonction si elles ont à la fois un même nom, car la variable locale remplace la variable globale mais ne modifie pas la valeur de la variable globale hors.in constante si vous souhaitez utiliser la même variable de nom dans une fonction différente. Cela ne vous a pas permis et de donner une erreur, car il définit une fois et utilisé dans tous les programmes et vous ne pouvez pas modifier la valeur de cette variable dans une fonction ou un blocage de la valeur fixe.


0 commentaires