Nice programing

함수의 PHP 액세스 전역 변수

nicepro 2020. 10. 31. 10:06
반응형

함수의 PHP 액세스 전역 변수


대부분의 프로그래밍 언어 범위 규칙에 따르면 내부 함수 외부에서 정의 된 변수에 액세스 할 수 있지만이 코드가 작동하지 않는 이유는 무엇입니까?

<?php
$data = 'My data';

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

menugen();
?>

[]출력.


액세스 할 전역 변수를 선언 해야 하므로 작동하지 않습니다 .

$data = 'My data';

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

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

menugen();

그렇지 않으면 http://php.net/manual/en/language.variables.scope.php를$GLOBALS['data'] 참조 하십시오.

약간의 OT라도 전역 사용을 아예 피하고 매개 변수로 전달하는 것을 선호합니다.


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

<?php
$data='My data';
function menugen(){
    global $data;
    echo "[".$data."]";
}
menugen();

또는

<?php
$data='My data';
function menugen(){
    echo "[".$GLOBALS['data']."]";
}
menugen();

즉, 전역을 과도하게 사용하면 코드가 잘못 될 수 있습니다. 일반적으로 필요한 것을 전달하는 것이 좋습니다. 예를 들어 전역 데이터베이스 개체를 참조하는 대신 데이터베이스에 대한 핸들을 전달하고 이에 따라 작업해야합니다. 이를 종속성 주입이라고합니다. 자동화 된 테스트를 구현하면 삶이 훨씬 쉬워집니다.


범위의 문제입니다. 요컨대, 전역 변수는 피해야합니다.

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

$data = 'My data';

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

또는 수업에 참여하고 액세스

class MyClass
{
    private $data = "";

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

}

편집 : @MatteoTassinari 답변을 참조하고 액세스하려면 전역으로 표시 할 수 있지만 전역 변수는 일반적으로 필요하지 않으므로 코딩을 다시 생각하는 것이 좋습니다.


이를 수행하는 또 다른 방법 :

<?php

$data = 'My data';

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

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

$menugen();

수년 동안 저는 항상이 형식을 사용했습니다.

   <?php
     $data = "Hello";

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

    sayHello();

   ?>

I find it straight-forward and easy to follow. The $GLOBAL is how PHP lets you reference a global variable. if you have used things like $_SERVER, $_POST, etc then you have reference a global variable without knowing it


You need to pass the variable into the function:

$data = 'My data';

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

If you want you can use "define" function but this function create a constants which can't be changed once defined.

<?php
define("GREETING", "Welcome to W3Schools.com!");

function myTest() {
    echo GREETING;
}

myTest();
?>

http://www.w3schools.com/php/php_constants.asp

참고URL : https://stackoverflow.com/questions/15687363/php-access-global-variable-in-function

반응형