다음과 같은 코드가 있습니다.
<?
$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'];
}
로부터 수동 :
현재 스크립트의 전체 범위에 정의 된 모든 변수에 대한 참조를 포함하는 연관 배열입니다. 변수 이름은 배열의 키입니다.
공통 변수가 필요한 함수 집합이있는 경우 전역 속성 대신 속성이있는 클래스를 선택하는 것이 좋습니다.
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';
전 세계적으로 사용
또는 스크립트 전체에서 액세스 할 수있는 상수를 사용할 수 있습니다
define('HOSTNAME', 'localhost');
답변
변수가 함수 외부에서 선언되면 이미 전역 범위에 있습니다. 따라서 선언 할 필요가 없습니다. 그러나이 변수를 호출 한 위치에서이 변수에 액세스 할 수 있어야합니다. 함수 내부에서 호출하는 경우 global
키워드 를 사용해야 합니다.
$variable = 5;
function name()
{
global $variable;
$value = $variable + 5;
return $value;
}
함수 외부에서 글로벌 키워드를 사용하는 것은 오류가 아닙니다. 이 파일을 함수에 포함 시키려면 변수를로 선언하면됩니다 global
.
config.php
global $variable;
$variable = 5;
other.php
function name()
{
require_once __DIR__ . '/config.php';
}
사용할 수도 있습니다 $GLOBALS
. 그것은 초 세계적이므로 어디에서나 액세스 할 수 있습니다.
$GLOBALS['variable'] = 5;
function name()
{
echo $GLOBALS['variable'];
}
선택에 따라 둘 중 하나를 선택할 수 있습니다.
답변
이 답변은 매우 늦었지만 부울, 배열 및 정수 초기 값을 전역 범위 정적 변수로 보유하는 클래스를 설정했습니다. 상수 문자열은 그대로 정의됩니다.
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
키워드 그렇지 않으면 클래스에 있어야합니다 $ A, $ B를 바르, 및 $ C 세계적 범위되지 않습니다.
답변
당신은 당신이 질문을 쓴 방식으로 이것을 대답했습니다- ‘define’을 사용하십시오. 그러나 일단 설정되면 정의를 변경할 수 없습니다.
또는 class :: constant와 같이 클래스에 상수가있는 트릭이 있습니다. 정적 속성을 변경하려는 경우 정적 속성을 설정하는 함수를 사용하여 클래스에 정적 속성을 선언하여 변수를 변수로 만들 수도 있습니다.
