programing

PHP 함수의 전역 변수 액세스

prostudy 2022. 9. 19. 23:15
반응형

PHP 함수의 전역 변수 액세스

대부분의 프로그래밍 언어 스코프 규칙에 따르면, 나는 그들 내부의 함수 밖에서 정의된 변수에 액세스할 수 있는데, 왜 이 코드가 작동하지 않는가?

<?php
    $data = 'My data';

    function menugen() {
        echo "[" . $data . "]";
    }

    menugen();
?>

은 「」입니다.[].

질문에 답하려면 함수 자체에서 액세스할 글로벌 변수를 선언해야 하기 때문에 작동하지 않습니다.

$data = 'My data';

function menugen() {
    global $data; // <-- Add this line

    echo "[" . $data . "]";
}

menugen();

않으면 그외이,, 음음음음음음음음 it it it it it it it it it it it로 접속할 수 있습니다.$GLOBALS['data']변수 범위」를 참조해 주세요.

주제에서 벗어나더라도 글로벌을 사용하지 말고 데이터를 매개 변수로 전달하는 이 좋습니다.

이 경우 위의 코드는 다음과 같습니다.

$data = 'My data';

function menugen($data) { // <-- Declare the parameter
    echo "[" . $data . "]";
}

menugen($data); // <-- And pass it at call time

다음 중 하나를 수행할 수 있습니다.

<?php
    $data = 'My data';

    function menugen() {
        global $data;
        echo "[" . $data . "]";
    }

    menugen();

또는

<?php
    $data = 'My data';

    function menugen() {
        echo "[" . $GLOBALS['data'] . "]";
    }

    menugen();

그러나 글로벌을 과도하게 사용하면 코드가 불량해질 수 있습니다.평소에는 필요한 것을 건네주는 것이 좋다.예를 들어 글로벌 데이터베이스 개체를 참조하는 대신 데이터베이스에 핸들을 전달하고 이에 따라 조치를 취해야 합니다.이를 의존성 주입이라고 합니다.자동 테스트를 구현하면 작업이 훨씬 쉬워집니다(필요한 경우).

또 다른 방법:

<?php

$data = 'My data';

$menugen = function() use ($data) {

    echo "[".$data."]";
};

$menugen();

업데이트 2020-01-13: Peter Mortensen 요청

PHP 5.3.0에서는 폐기를 작성할 수 있는 익명 기능을 지원하고 있습니다.폐쇄는 해당 범위 밖에서 작성된 변수에 액세스할 수 있습니다.

예에서는 할 수 .$data왜냐하면 그것은 에 선언됐기 때문이다.use절을 클릭합니다.

그것은 범위의 문제이다.즉, 다음과 같이 글로벌 변수를 피해야 합니다.

매개 변수로 전달해야 합니다.

$data = 'My data';

function menugen($data)
{
    echo $data;
}

또는 수업시간에 가지고 접속할 수도 있습니다.

class MyClass
{
    private $data = "";

    function menugen()
    {
        echo this->data;
    }

}

@MatteoTassinari의 답변도 참조해 주십시오.이 답변에 액세스하려면 글로벌하다고 마크할 수 있지만 글로벌 변수는 일반적으로 필요하지 않으므로 코딩에 대해 다시 생각해 보는 것이 좋습니다.

오랜 세월 동안 저는 항상 다음 형식을 사용해 왔습니다.

<?php
    $data = "Hello";

    function sayHello(){
        echo $GLOBALS["data"];
    }

    sayHello();
?>

나는 그것이 간단하고 이해하기 쉽다고 생각한다.$GLOBALS는 PHP를 통해 글로벌 변수를 참조할 수 있도록 합니다.$_SERVER, $_POST 등을 사용한 적이 있는 경우 모르는 사이에 글로벌 변수를 참조하게 됩니다.

<?php

    $data = 'My data';

    $menugen = function() use ($data) {

        echo "[ $data ]";
    };

    $menugen();
?>

심플화도 가능

echo "[" . $data . "]"

로.

echo "[$data]"

PHP는 PHP를 참조해 주세요.의 문항은 다 되다를 사용해서 .global나에게 효과가 없었고, 적절한 사용법을 알아내는 데 시간이 좀 걸렸다.use.

정답입니다.

$functionName = function($stuff) use ($globalVar) {
 //do stuff
}
$output = $functionName($stuff);
$otherOutput = $functionName($otherStuff);

이는 올바르지 않습니다.

function functionName($stuff) use ($globalVar) {
 //do stuff
}
$output = functionName($stuff);
$otherOutput = functionName($otherStuff);

구체적인 예를 들어 다음과 같습니다.

    $data = 'My data';

    $menugen = function() use ($data) {
        echo "[" . $data . "]";
    }

    $menugen();

이 답을 찾고 있었어요 다른 사람들도 비슷한 걸 가지고 있는지 궁금했어요$prefix익명의 함수에 전달됩니다.글로벌 스코프가 길인 것 같아요?이것은, 어레이의 프리픽스를 파괴하지 않는 방법으로 부가하기 위한 솔루션입니다.

private function array_prefix($prefix, $arr) {
  $GLOBALS['prefix'] = $prefix;
  return array_map(
    function($ele) {
      return $GLOBALS['prefix'].$ele;
    },
    $arr
  );
}

함수 내부의 글로벌 변수에 액세스하는 올바른 방법은 위에 나와 있습니다.

단, 를 사용하지 않을 경우global키워드 및$GLOBALS어떤 이유로든 변수(예를 들어 여러 함수를 사용하여 매번 "쓰기"를 해야 하는 경우)는 다음과 같습니다.

$variable = 42;  // the global variable you want to access

// write a function which returns it
function getvar(){ 
    global $variable; 
    return $variable; 
}

//--------------

function func1()
{
    // use that getter function to get the global variable
    echo getvar();  // 42
}

function func2()
{
    echo getvar();  // 42
}
...

변수를 함수에 전달해야 합니다.

$data = 'My data';

function menugen($data)
{
    echo $data;
}

언급URL : https://stackoverflow.com/questions/15687363/access-a-global-variable-in-a-php-function

반응형