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
'programing' 카테고리의 다른 글
변수가 null이 아닌지 확인하는 방법 (0) | 2022.09.19 |
---|---|
특정 서브스트링 뒤에 문자열을 얻는 방법 (0) | 2022.09.19 |
어떻게 조건부로의 반응 요소들에 특성을 추가하니? (0) | 2022.09.19 |
ubuntu 서버에서 pip install mariadb 오류 발생 (0) | 2022.09.19 |
Mockito : doAnswer vs then Return (0) | 2022.09.19 |