PHP -Quelle est la différence entre les variables et les constantes
Selon de nombreuses sources, register_globals (variables globales) doivent être désactivés dans votre php.ini. Dois-je écrire define() dans mon code et utiliser des constantes si les variables globales sont désactivés? Sont ceux qui sont liés, même?
Elles sont liées en ce qu'elles ont une portée mondiale, mais les constantes sont destinés à ne pas changer une fois défini, contrairement aux variables globales, qui peut modifier au fur et à mesure. Donc, juste de basculer à l'aide define() au lieu d'un mondial n'aidera pas beaucoup.
C'est mieux si vous refactoriser vos méthodes afin de prendre les variables comme paramètres et s'en servir pour transmettre des variables autour de.
Je veux avoir quelques pré-définir les variables comme des noms de répertoire qui serait mondial, et accessible à tous. Je veux aussi variables globales pour les personnes handicapées. Puis-je utiliser define() dans ce cas? Si vous n'avez pas l'intention de modifier la variable que la page s'exécute, alors oui, c'est l'emploi pour les définir. oui, c'est une bonne raison de les utiliser, comme vous n'allez pas être en train de changer les répertoires au moment de l'exécution.
Tout d'abord, le register_globals que vous désactiver dans votre php.ini fait référence à un vieux PHP où toutes les variables envoyées par l'intermédiaire d'une chaîne de requête (GET) ou un formulaire (GET/POST) seront convertis en un mondiaux variable PHP. C'est la fonctionnalité qui est (et doit être) désactivé lorsque vous désactiver register_globals. Même avec ceci, vous pouvez toujours définir des variables globales dans votre application.
En général en termes de programmation, les variables globales (pas de PHP register_globals) sont considérés comme "mauvais" parce que lorsque vous rencontrez l'un en tant que programmeur, vous n'avez aucune idée de ce que d'autres parties de l'application peuvent être l'utilisation ou la modification, ou quel est l'effet de vos modifications mondiale pourrait avoir. Aussi, si vous êtes à la définition d'une nouvelle variable globale, il y a une chance que vous allez écraser une variable existante que quelqu'un d'autre est en s'appuyant sur. Lorsque les variables sont définies localement (dans une seule fonction, ou dans d'autres langues en un seul bloc), vous pouvez examiner l'étendue locale et généralement de déterminer quel changement pour que la variable n'.
Constantes, d'autre part, de ne jamais changer. Vous définissez une fois, et ils restent définis et personne ne peut les changer. C'est pourquoi avoir des constantes globales est considéré comme "moins mauvais" que d'avoir des variables globales.
Les constantes sont toujours mauvais alors? Dois-je utiliser les sessions pour passer des trucs comme les noms de répertoire et de tel? les constantes ne sont pas seulement les "moins mauvais". ils sont parfaitement acceptable pour une utilisation dans de nombreux cas, comme ce Ga est dit à propos de répertoires. Les constantes sont beaux, bien que vous aurez à trouver des arguments convaincants que vous ne devriez pas utiliser des constantes dans l'espace de noms global (c'est à dire uniquement des constantes de classe pensé être utilisé). Il n'y a pas de droit de réponse ici, seulement des réponses avec les différents arbitrages.
Variables globales ne sont pas constants (vous pouvez changer la valeur d'une variable globale, mais vous ne pouvez définir une constante une fois).
Constantes ne sont pas toujours globale (vous pouvez déclarer une constante dans une classe).
Aussi, les variables globales peuvent être de tout type: scalaire, un tableau ou d'un objet. Les constantes ne peuvent être des scalaires.
Je ne vais pas dire que ce soit des constantes ou des variables globales sont bonnes ou mauvaises. Lorsqu'ils sont bien utilisés, ils ont tous deux des utilisations bénéfiques. Il y a des problèmes de sécurité autour de la register_globals fonctionnalité qui sont distincts de la plus générale l'utilisation de variables globales.
Constantes, une fois défini, ne peut pas être modifié.
Ne pas utiliser des constantes comme des variables. Si vous avez besoin d'utiliser des variables dans les fonctions de, les passer dans la fonction elle-même. Utiliser tout ce qui est dans la façon dont il a été destiné à être utilisé. Les Variables sont variable et les Constantes sont constante.
Je veux utiliser des constantes pour être en mesure de passer autour des noms de répertoire. Si la valeur de répertoire n'est pas prévu de modifier, puis par tous les moyens, utiliser une constante 🙂
<?php
//Certainly constant
define('MINUTES_PER_HOUR',60);
define('DOZEN',12);//Constant, but specific to this application
define('GREETING','Dear %s');
define('TIMEOUT',30);//Configurable, but constant for this installation
define('DATABASE','mydb');
define('IMAGES_DIRECTORY','/tmp/images');//Not constant, or some other reason why can't be constant
$user = $_POST['userid'];
$days_of_week = array('Mo','Tu','We','Th','Fr','Sa','Su');?>
Autre chose à considérer -- constantes ne peuvent pas stocker des choses comme des tableaux ou des objets, alors que quelque chose de défini à $GLOBALS peut être n'importe quel type de variable. Dans certains cas, si vous besoin de quelque chose pour être mondial, mais il ne peut pas être stockée à une constante en utilisant define(), vous pouvez utiliser $GLOBALS à la place.
Aussi, register_globals et $GLOBALS ne sont PAS la même chose!
Vous pouvez modifier la variable globale à l'intérieur de la fonction si tous les deux ont un même nom, car la variable locale remplacer la variable globale mais ne change pas la valeur de la variable globale à l'extérieur.en constante si vous souhaitez utiliser le même nom de variable dans la fonction différente qui pas permis de vous et de donner une erreur,car cela permet de définir un temps et est utilisé dans tous les programmes et vous ne pouvez pas modifier la valeur de cette variable dans n'importe quelle fonction ou bloc c'est une valeur fixe .
<?php
if(defined('SOMEVAL')) echo SOMEVAL;else echo "SOMEVAL does not exists\n";
include 'fileA.php';if(defined('SOMEVAL')) echo 'SOMEVAL='.SOMEVAL;else echo "SOMEVAL does not exists\n";?>
Puis exécutez fileB.php et vous verrez que l'avant de l'inclure fileA.php, SOMEVAL n'est pas défini. Donc, ce que cela signifie, c'est que avant de définir quoi que ce soit, il ne sera pas visible pour le script.
Elles sont liées en ce qu'elles ont une portée mondiale, mais les constantes sont destinés à ne pas changer une fois défini, contrairement aux variables globales, qui peut modifier au fur et à mesure. Donc, juste de basculer à l'aide define() au lieu d'un mondial n'aidera pas beaucoup.
C'est mieux si vous refactoriser vos méthodes afin de prendre les variables comme paramètres et s'en servir pour transmettre des variables autour de.
Si vous n'avez pas l'intention de modifier la variable que la page s'exécute, alors oui, c'est l'emploi pour les définir.
oui, c'est une bonne raison de les utiliser, comme vous n'allez pas être en train de changer les répertoires au moment de l'exécution.
OriginalL'auteur Parrots
Quelques petites choses ici.
Tout d'abord, le register_globals que vous désactiver dans votre php.ini fait référence à un vieux PHP où toutes les variables envoyées par l'intermédiaire d'une chaîne de requête (GET) ou un formulaire (GET/POST) seront convertis en un mondiaux variable PHP. C'est la fonctionnalité qui est (et doit être) désactivé lorsque vous désactiver register_globals. Même avec ceci, vous pouvez toujours définir des variables globales dans votre application.
En général en termes de programmation, les variables globales (pas de PHP register_globals) sont considérés comme "mauvais" parce que lorsque vous rencontrez l'un en tant que programmeur, vous n'avez aucune idée de ce que d'autres parties de l'application peuvent être l'utilisation ou la modification, ou quel est l'effet de vos modifications mondiale pourrait avoir. Aussi, si vous êtes à la définition d'une nouvelle variable globale, il y a une chance que vous allez écraser une variable existante que quelqu'un d'autre est en s'appuyant sur. Lorsque les variables sont définies localement (dans une seule fonction, ou dans d'autres langues en un seul bloc), vous pouvez examiner l'étendue locale et généralement de déterminer quel changement pour que la variable n'.
Constantes, d'autre part, de ne jamais changer. Vous définissez une fois, et ils restent définis et personne ne peut les changer. C'est pourquoi avoir des constantes globales est considéré comme "moins mauvais" que d'avoir des variables globales.
les constantes ne sont pas seulement les "moins mauvais". ils sont parfaitement acceptable pour une utilisation dans de nombreux cas, comme ce Ga est dit à propos de répertoires.
Les constantes sont beaux, bien que vous aurez à trouver des arguments convaincants que vous ne devriez pas utiliser des constantes dans l'espace de noms global (c'est à dire uniquement des constantes de classe pensé être utilisé). Il n'y a pas de droit de réponse ici, seulement des réponses avec les différents arbitrages.
OriginalL'auteur Alan Storm
Variables globales ne sont pas constants (vous pouvez changer la valeur d'une variable globale, mais vous ne pouvez définir une constante une fois).
Constantes ne sont pas toujours globale (vous pouvez déclarer une constante dans une classe).
Aussi, les variables globales peuvent être de tout type: scalaire, un tableau ou d'un objet. Les constantes ne peuvent être des scalaires.
Je ne vais pas dire que ce soit des constantes ou des variables globales sont bonnes ou mauvaises. Lorsqu'ils sont bien utilisés, ils ont tous deux des utilisations bénéfiques. Il y a des problèmes de sécurité autour de la
register_globals
fonctionnalité qui sont distincts de la plus générale l'utilisation de variables globales.OriginalL'auteur Bill Karwin
Constantes, une fois défini, ne peut pas être modifié.
Ne pas utiliser des constantes comme des variables. Si vous avez besoin d'utiliser des variables dans les fonctions de, les passer dans la fonction elle-même. Utiliser tout ce qui est dans la façon dont il a été destiné à être utilisé. Les Variables sont variable et les Constantes sont constante.
Si la valeur de répertoire n'est pas prévu de modifier, puis par tous les moyens, utiliser une constante 🙂
OriginalL'auteur Sampson
Une constante exemples:
OriginalL'auteur Sjoerd
Autre chose à considérer -- constantes ne peuvent pas stocker des choses comme des tableaux ou des objets, alors que quelque chose de défini à $GLOBALS peut être n'importe quel type de variable. Dans certains cas, si vous besoin de quelque chose pour être mondial, mais il ne peut pas être stockée à une constante en utilisant define(), vous pouvez utiliser $GLOBALS à la place.
Aussi, register_globals et $GLOBALS ne sont PAS la même chose!
OriginalL'auteur Travis
Vous pouvez modifier la variable globale à l'intérieur de la fonction si tous les deux ont un même nom, car la variable locale remplacer la variable globale mais ne change pas la valeur de la variable globale à l'extérieur.en constante si vous souhaitez utiliser le même nom de variable dans la fonction différente qui pas permis de vous et de donner une erreur,car cela permet de définir un temps et est utilisé dans tous les programmes et vous ne pouvez pas modifier la valeur de cette variable dans n'importe quelle fonction ou bloc c'est une valeur fixe .
OriginalL'auteur anjli rajput
Essayez ce simple test:
fileA.php:
fileB.php:
Puis exécutez fileB.php et vous verrez que l'avant de l'inclure fileA.php, SOMEVAL n'est pas défini. Donc, ce que cela signifie, c'est que avant de définir quoi que ce soit, il ne sera pas visible pour le script.
OriginalL'auteur Daniel