함수의 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
'Nice programing' 카테고리의 다른 글
| 푸시 알림을위한 장치 토큰 가져 오기 (0) | 2020.10.31 |
|---|---|
| CMake로 컴파일러의 C ++ 11 지원을 감지하는 방법 (0) | 2020.10.31 |
| 간단한 파이프로 소수점 2 자리로 제한 (0) | 2020.10.31 |
| 4 개의 그룹으로 배열 요소를 작업하는 루비 (0) | 2020.10.31 |
| org.postgresql.util.PSQLException : FATAL : 죄송합니다. 이미 클라이언트가 너무 많습니다. (0) | 2020.10.31 |