У меня есть код примерно так:
<?
$a="localhost";
function body(){
global $a;
echo $a;
}
function head(){
global $a;
echo $a;
}
function footer(){
global $a;
echo $a;
}
?>
Есть ли способ определить глобальную переменную в одном месте и сделать переменную $a
доступной во всех функциях сразу? без использования global $a;
больше?
Вместо этого можно использовать массив $GLOBALS
:
$GLOBALS['a'] = 'localhost';
function body(){
echo $GLOBALS['a'];
}
Из Manual:
Ассоциативный массив, содержащий ссылки на все переменные, которые в настоящее время определены в глобальной области действия script. Имена переменных - это ключи массива.
Если у вас есть набор функций, которым нужны некоторые общие переменные, класс со свойствами может быть хорошим выбором вместо глобального:
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);
Если переменная не изменится, вы можете использовать define
Пример:
define('FOOTER_CONTENT', 'Hello I\'m an awesome footer!');
function footer()
{
echo FOOTER_CONTENT;
}
Добавьте переменные в супер глобальный массив $GLOBALS, например
$GLOBALS['variable'] = 'localhost';
и использовать его глобально
или вы можете использовать константу, доступную на всем протяжении script
define('HOSTNAME', 'localhost');
Вы можете попробовать ключевое слово use
в функциях Закрытие или Lambdas, если это соответствует вашему намерению... PHP 7.0. Не то, чтобы это было лучше, а просто альтернатива.
$foo = "New";
$closure = (function($bar) use ($foo) {
echo "$foo $bar";
})("York");
Этот ответ очень поздний, но то, что я делаю, задается классом, который содержит значения Booleans, array и integer-initial, как статические переменные глобальной области. Любые константные строки определяются как таковые.
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
Ключевые слова static
должны присутствовать в классе else, а vars $a, $b и $c не будут находиться в глобальном масштабе.
Вы ответили так, как вы написали вопрос - используйте 'define'. но после установки вы не можете изменить определение.
Кроме того, есть трюки с константой в классе, такие как class:: constant, которые вы можете использовать. Вы также можете сделать их переменными, объявив статические свойства классу, с функциями для установки статического свойства, если вы хотите его изменить.
Переменная, объявленная вне функции, имеет GLOBAL SCOPE и может быть доступна только вне функции
<?php
global $a;
$a=10;
echo $a;
function xl($a){
echo "in the function".$a." <br/>";
}
echo "in outside ".$a."<br/>";
xl($a);
?>
Вам больше не следует использовать глобальные переменные, они недоступны в PHP 5.4.
FOOTER_CONTENT
пытается изменить? Это какfinal
в Java илиconst
в C, C ++ и C #?