J'ai un code quelque chose comme ça:
<?
$a="localhost";
function body(){
global $a;
echo $a;
}
function head(){
global $a;
echo $a;
}
function footer(){
global $a;
echo $a;
}
?>
est-il possible de définir la variable globale à un endroit et de rendre la variable $a
accessible dans toutes les fonctions à la fois? sans utiliser global $a;
plus?
Le $GLOBALS
array peut être utilisé à la place:
$GLOBALS['a'] = 'localhost';
function body(){
echo $GLOBALS['a'];
}
Du Manuel :
Tableau associatif contenant des références à toutes les variables actuellement définies dans la portée globale du script. Les noms de variables sont les clés du tableau.
Si vous avez un ensemble de fonctions nécessitant des variables communes, une classe avec des propriétés peut constituer un bon choix au lieu d'un global:
class MyTest
{
protected $a;
public function __construct($a)
{
$this->a = $a;
}
public function head()
{
echo $this->a;
}
public function footer()
{
echo $this->a;
}
}
$a = 'localhost';
$obj = new MyTest($a);
Si la variable ne change pas, vous pouvez utiliser define
Exemple:
define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');
function footer()
{
echo FOOTER_CONTENT;
}
Ajoutez vos variables dans le tableau super global $ GLOBALS comme
$GLOBALS['variable'] = 'localhost';
et l'utiliser globalement
ou vous pouvez utiliser constante qui sont accessibles tout au long du script
define('HOSTNAME', 'localhost');
Si une variable est déclarée en dehors d'une fonction, sa portée est déjà globale. Donc, il n'y a pas besoin de déclarer. Mais à partir de l'endroit où vous appelez cette variable, vous devez avoir accès à cette variable. Si vous appelez depuis une fonction, vous devez utiliser le mot clé global
:
$variable = 5;
function name()
{
global $variable;
$value = $variable + 5;
return $value;
}
L'utilisation d'un mot clé global en dehors d'une fonction n'est pas une erreur. Si vous souhaitez inclure ce fichier dans une fonction, vous pouvez déclarer la variable sous la forme global
.
config.php
global $variable;
$variable = 5;
other.php
function name()
{
require_once __DIR__ . '/config.php';
}
Vous pouvez également utiliser $GLOBALS
. C'est un superglobal donc il a accès partout.
$GLOBALS['variable'] = 5;
function name()
{
echo $GLOBALS['variable'];
}
Selon votre choix, vous pouvez choisir l'un ou l'autre.
Cette réponse est très tardive, mais ce que je fais est de définir une classe contenant les valeurs booléennes, les tableaux et les valeurs initiales sous forme de variables statiques à portée globale. Toutes les chaînes constantes sont définies comme telles.
define("myconstant", "value");
class globalVars {
static $a = false;
static $b = 0;
static $c = array('first' => 2, 'second' => 5);
}
function test($num) {
if (!globalVars::$a) {
$returnVal = 'The ' . myconstant . ' of ' . $num . ' plus ' . globalVars::$b . ' plus ' . globalVars::$c['second'] . ' is ' . ($num + globalVars::$b + globalVars::$c['second']) . '.';
globalVars::$a = true;
} else {
$returnVal = 'I forgot';
}
return $returnVal;
}
echo test(9); ---> The value of 9 + 0 + 5 is 14.
echo "<br>";
echo globalVars::$a; ----> 1
Les mots-clés static
doivent être présents dans la classe, sinon les vars $ a, $ b et $ c ne seront pas globalement définis.
Vous avez répondu à cela de la manière dont vous avez écrit la question - utilisez 'define'. mais une fois défini, vous ne pouvez pas changer de définition.
Alternativement, il existe des astuces avec une constante dans une classe, telles que class :: constant que vous pouvez utiliser. Vous pouvez également les rendre variables en déclarant des propriétés statiques à la classe, avec des fonctions pour définir la propriété statique si vous souhaitez la modifier.
Que se passe-t-il si vous utilisez la fonction procédurale au lieu de variable et que vous les appelez comme vous.
Je fais habituellement une collection de valeurs de configuration et les mets dans une fonction avec l'instruction return. Je viens d'inclure cela là où je dois utiliser la valeur globale et appeler une fonction particulière.
function Host()
{
return "localhost";
}
Pensons un peu différent:
class globe{
static $foo = "bar";
}
Et vous pouvez l’utiliser et le modifier à votre guise, comme:
function func(){
echo globe::$var;
}