[php] PHP에서 전역 변수를 선언하는 방법은 무엇입니까?

다음과 같은 코드가 있습니다.

<?
    $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와 같이 클래스에 상수가있는 트릭이 있습니다. 정적 속성을 변경하려는 경우 정적 속성을 설정하는 함수를 사용하여 클래스에 정적 속성을 선언하여 변수를 변수로 만들 수도 있습니다.


답변

이것이 의도에 맞는 경우 클로저 함수 또는 Lambdasuse 에서 키워드 를 사용해 볼 수 있습니다 … PHP 7.0. 그것은 더 좋지는 않지만 대안입니다.

$foo = "New";
$closure = (function($bar) use ($foo) {
    echo "$foo $bar";
})("York");

데모 |
정보