Windows의 환경 변수(환경)에는 시스템 설정 및 사용자 환경에 대한 다양한 정보가 포함됩니다. 사용자, 시스템 및 프로세스 환경 변수는 구별됩니다.

콘텐츠를 보는 가장 쉬운 방법 환경 변수 Windows - 시스템 속성 열기( sysdm.cpl) -> 고급 -> 환경 변수.보시다시피 열린 섹션에는 두 개의 섹션이 있습니다. 위쪽 섹션에는 사용자의 환경 변수가 포함되고 아래쪽 섹션에는 시스템 환경 변수가 포함됩니다.

또한 환경 변수는 시스템 레지스트리에 저장됩니다. 사용자 변수는 에 저장됩니다. 전신 - 인 HKLM\SYSTEM\CurrentControlSet\Control\세션 관리자\환경.

모든 환경 변수의 값을 표시할 수 있습니다. 명령줄윈도우. 명령은 간단합니다.

이 명령은 환경 변수와 해당 값을 나열합니다.

PowerShell에서 모든 환경 변수를 표시하려면 다음 명령을 사용할 수 있습니다.

하나의 변수 값만 표시하려면 echo 명령을 사용해야 하며 변수 이름은 퍼센트 기호로 묶어야 합니다. 예를 들어,

에코 %시스템루트%

설정 > c:\tmp\env_var.txt

특정 프로세스의 환경 변수는 free를 사용하여 얻을 수 있습니다. 프로세스 탐색기 유틸리티(Sysinternals에서). 프로세스 속성을 열고 탭으로 이동하십시오. 환경.

PHP의 변수포함할 수 있는 일종의 정보 컨테이너입니다. 다른 유형데이터(텍스트, 숫자, 배열 등). 일반적으로 변수를 사용하면 변수에 지정된 정보를 생성, 저장, 수정하고 빠르게 액세스할 수 있습니다.

PHP에서 변수를 만드는 방법

처음에 변수에는 부호가 포함됩니다. $ (달러) - 변수 사용 지정, 그 다음 문자 라틴 알파벳(부터 z까지, 크고 작은 것까지), 끝에는 번호. 제목에 밑줄(끝이 아님)을 사용할 수도 있습니다.

변수 이름 지정 방법:

$var
$변수
$1945
$_변수
변수 이름을 지정하지 않는 방법:

$1 - 숫자로만 구성됨
$1var - 변수 이름을 숫자로 시작할 수 없습니다.
$/var - 추가 문자에는 밑줄만 허용됩니다 _
$variable - 키릴 문자가 허용됩니다. PHP 문서그러나 권장하지 않음
$var iable - 공백을 사용할 수 없습니다.

각 변수에는 값이 할당됩니다. 부호는 값을 할당하는 데 사용됩니다. = (같음). 스크립트 처리 중 변수의 값은 다양한 조건에 따라 반복적으로 변경될 수 있습니다.

$city = "모스크바"; // 변수 $city에 문자열(따옴표로 묶음) 값이 할당됨 모스크바
$년 = 1147; // $year 변수에 숫자 값 1147이 할당되었습니다.
?>

$name = "알렉산더";
$Name = "알렉스";
echo "$이름, $이름"; // "Alexander, Alexey"를 출력합니다.
?>

PHP 변수 출력

별도로 다음을 사용하여 변수를 표시하는 방법을 분석해야 합니다. 출력 문, 우리가 PHP 페이지 생성하기 마지막 단원에서 분석한 작업입니다. 출력 연산자. . 아래는 시리즈 좋은 예댓글과 함께.

// 이것이 우리가 변수의 값을 설정하는 방법입니다
$name1 = "알렉스";
$name2 = "알렉산더";

// 변수 표시
에코 $이름2; // 출력: 알렉산더
echo "이름1은 $이름1입니다"; // name1은 Alexey입니다.

// 작은따옴표를 사용할 때 출력
// 값이 아닌 변수 이름
echo "이름1은 $이름1입니다"; // 출력: name1은 $name1입니다.

// 변수의 값만 표시할 수 있습니다.
에코 $이름1; // 알렉세이
에코 $이름1,$이름2; // 알렉세이알렉산더
에코 $name1." ".$name2; // 알렉시 알렉산더
echo "$이름1, $이름2"; // 알렉시, 알렉산더

에코<<이것은 "here document" 구문을 사용하여 출력합니다.
$variable 대체가 있는 여러 줄.
끝;

PHP 변수 연산

PHP의 산술 연산
숫자 값의 경우 더하기, 빼기, 곱하기 등의 산술 연산을 수행할 수 있습니다.

-$a(부정) $a의 부호를 변경합니다.
$a + $b(덧셈) $a와 $b의 합.
$a - $b(뺄셈) $a와 $b의 차이.
$a * $b(곱하기) $a와 $b의 곱.
$a / $b(나누기) $a를 $b로 나눈 몫.
$a % $b(모듈로) $a를 $b로 나눈 나머지 정수.
예를 고려하십시오

$a = 2; // 숫자의 경우 따옴표를 넣지 않습니다.
$b = 3; // 숫자의 경우 따옴표를 넣지 않습니다.

$결과 = $a + $b; // 변수 추가
에코 $ 결과; // 5를 출력

$결과 = $b - $a; // 변수 추가
에코 $ 결과; // 1을 출력

PHP의 증가 및 감소 연산
이러한 작업은 주로 사이클 구성에 유용합니다. 이에 대해서는 잠시 후에 설명하겠습니다.
접두사- 변수 앞에 쓰여진 연산자( --$a; ++$a). 변경 전의 변수 값을 반환합니다.
접미사- 변수 뒤에 쓰여진 연산자( $a--; $a--). 변경 사항이 있는 변수 값을 반환합니다.
증가- 가치를 높이는 것.
감소- 가치 감소.

++$a접두사 증분. $a를 1씩 증가시키고 $a의 값을 반환합니다.
$a++후위 증분. $a의 값을 반환한 다음 $a를 1씩 증가시킵니다.
--$a접두사 감소. $a를 1 감소하고 $a의 값을 반환합니다.
$a--후위 감소. $a의 값을 반환한 다음 $a를 1만큼 감소시킵니다.
에코 "

후위 증분

";
$a = 5;
echo "5이어야 합니다: " . $a++ . "\N";

에코"

접두사 증분

";
$a = 5;
echo "6이어야 합니다: " . ++$a . "\N";
echo "6이어야 합니다: " . $a . "\N";

에코"

후위 감소

";
$a = 5;
echo "5이어야 합니다: " . $a-- . "\N";

에코"

접두사 감소

";
$a = 5;
echo "4이어야 합니다: " . --$a . "\N";
echo "4이어야 합니다: " . $a . "\N";
?>

PHP의 할당 작업
기본 연산자처럼 보인다 = . 언뜻 보기에 이것은 등호 연산자인 것처럼 보일 수 있습니다. 실제로는 그렇지 않습니다. 실제로 할당 연산자는 왼쪽 피연산자가 오른쪽 표현식의 값을 가져옴을 의미합니다(즉, 결과 값으로 설정됨). 결합 연산자- 후속 작업에 변수의 이전 값을 사용할 수 있는 연산자입니다(문자열 변수에 추가(텍스트 포함) 또는 숫자 값 추가).

$a = ($b = 2) + 4; // 결과: $a는 6으로 설정되고 $b는 2로 설정됩니다.

$a = 2;
$a += 3; // $a = $a + 3과 유사하게 $a를 5로 설정합니다.
$b = "안녕하세요";
$b .= "평화!"; // $b = $b처럼 $b를 "Hello World!"로 설정합니다. "거기!";

도 있다 비교 연산그리고 두뇌 티저, 그러나 우리는 다음 수업에서 그들에 대해 이야기할 것입니다. 한번에 많은 정보로 겁먹지 않도록 노력하겠습니다!)

이 단원에서는 범위를 다룹니다. PHP 변수. 지역 범위와 전역 범위의 차이점을 설명하고, 함수 내부의 전역 변수에 액세스하는 방법, 슈퍼 전역으로 작업하는 방법 및 정적 변수를 만드는 방법을 보여줍니다.

시작할 때 PHP 배우기함수와 객체로 작업을 시작하면 변수의 범위가 약간의 혼란을 야기합니다. 다행히도 이와 관련하여 PHP의 규칙은 (다른 프로그래밍 언어에 비해) 이해하기가 매우 쉽습니다.

범위란 무엇입니까?

변수 범위는 변수가 정의되고 액세스할 수 있는 컨텍스트입니다. PHP에는 두 가지 변수 범위가 있습니다.

  • 글로벌- 변수는 스크립트의 어디에서나 액세스할 수 있습니다.
  • 현지의- 변수는 변수가 정의된 함수 내에서만 액세스할 수 있습니다.

변수 범위, 특히 로컬 범위는 코드 관리를 크게 단순화합니다. 모든 변수가 전역 변수인 경우 스크립트의 어느 곳에서나 변경할 수 있습니다. 스크립트의 다른 부분이 같은 이름의 변수를 사용하는 경우가 매우 많기 때문에 이는 혼란과 큰 스크립트로 이어질 것입니다. 범위를 로컬 컨텍스트로 제한하여 변수에 액세스할 수 있는 코드의 경계를 정의하여 코드를 보다 강력하고 모듈화하고 디버그하기 쉽게 만듭니다.

전역 범위의 변수를 전역 변수라고 하고 지역 범위를 가진 변수를 지역 변수라고 합니다.

다음은 전역 및 지역 변수가 작동하는 방법의 예입니다.

"; ) sayHello(); echo "\$globalName 값: "$globalName"
"; echo "\$localName 값: "$localName"
"; ?>

안녕 해리! $globalName 값: "Zoya" $localName 값: ""

이 스크립트에서 두 개의 변수를 만들었습니다.

  • $globalName- 이것은 글로벌변하기 쉬운
  • $localName- 이것은 현지의 sayHello() 함수 내부에 생성된 변수입니다.

변수와 함수가 생성된 후 스크립트는 "Hi Harry!"를 출력하는 sayHello()를 호출합니다. . 그런 다음 스크립트는 echo 함수를 사용하여 두 변수의 값을 출력하려고 합니다. 다음은 발생합니다.

  • 왜냐하면 $globalName함수 외부에서 생성되었으므로 스크립트의 모든 위치에서 사용할 수 있으므로 "Zoya"가 표시됩니다.
  • $localName sayHello() 함수 내에서만 사용할 수 있습니다. echo 표현식이 함수 외부에 있기 때문에 PHP는 로컬 변수에 대한 액세스를 허용하지 않습니다. 대신, PHP는 코드가 $localName 이라는 새로운 변수를 생성할 것이라고 가정합니다. 이 변수는 기본적으로 빈 문자열로 설정됩니다. 이것이 echo에 대한 두 번째 호출이 $localName 변수에 대한 값 ""을 출력하는 이유입니다.

함수 내 전역 변수 액세스

전역 변수에 액세스하려면 기능 외부그냥 그녀의 이름을 쓰십시오. 그러나 전역 변수에 액세스하려면 함수 내부, 먼저 global 키워드를 사용하여 함수에서 변수를 전역으로 선언해야 합니다.

Function myFunction() ( global $globalVariable; // 전역 변수 액세스 $globalVariable )

그렇지 않으면 PHP는 로컬 변수를 생성하거나 사용한다고 가정합니다.

다음은 함수 내에서 전역 변수를 사용하는 예제 스크립트입니다.

"; global $globalName; echo "$globalName님 안녕하세요!
"; ) 안녕(); ?>

실행되면 스크립트는 다음을 출력합니다.

안녕 해리! 안녕 조야!

sayHello() 함수는 예어 global을 사용하여 $globalName 변수를 전역으로 선언합니다. 그런 다음 그녀는 변수에 액세스하고 해당 값("Zoya")을 출력할 수 있습니다.

슈퍼글로벌이란?

PHP에는 다양한 정보를 포함하는 미리 정의된 전역 배열의 특별한 집합이 있습니다. 이러한 배열은 슈퍼 글로벌,다음을 포함하여 스크립트의 어디에서나 액세스할 수 있기 때문에 내부 공간함수이며 global 키워드를 사용하여 정의할 필요가 없습니다.

다음은 PHP 버전 5.3에서 사용할 수 있는 슈퍼글로벌 목록입니다.

  • $GLOBALS - 스크립트의 모든 전역 변수 목록(수퍼 전역 제외)
  • $_GET - 브라우저가 GET 요청으로 제출한 모든 양식 필드 목록을 포함합니다.
  • $_POST - 브라우저가 POST 요청을 사용하여 제출한 모든 양식 필드 목록을 포함합니다.
  • $_COOKIE - 브라우저에서 보낸 모든 쿠키 목록 포함
  • $_REQUEST - $_GET, $_POST, $_COOKIE 배열에 포함된 모든 키/값 조합 포함
  • $_FILES - 브라우저에서 다운로드한 모든 파일 목록을 포함합니다.
  • $_SESSION - 현재 브라우저에 대한 세션 변수를 저장하고 사용할 수 있습니다.
  • $_SERVER - 실행 중인 스크립트의 파일 이름 및 브라우저의 IP 주소와 같은 서버에 대한 정보를 포함합니다.
  • $_ENV - CGI 변수와 같이 PHP에 전달되는 환경 변수 목록을 포함합니다.
예를 들어 $_GET을 사용하여 스크립트의 요청 URL 문자열에 포함된 변수 값을 가져와 페이지에 표시할 수 있습니다.

URL http://www.example.com/script.php?yourName=Fred로 위의 스크립트를 실행하면 다음과 같이 출력됩니다.

헤이 프레드!

경고!실제 스크립트에서는 보안이 취약하기 때문에 이 데이터 전송을 사용해서는 안 됩니다. 항상 데이터를 확인하거나 필터링해야 합니다.

$GLOBALS superglobal은 global 키워드를 사용할 필요 없이 함수의 전역 변수에 대한 액세스를 구성할 수 있으므로 사용하기가 매우 편리합니다. 예를 들어:

"; ) sayHello(); // "Hello Zoya!" 표시 ?>

정적 변수: 주변 어딘가에 있습니다.

함수 내에서 지역 변수를 생성하면 함수가 실행되는 동안에만 존재합니다. 함수가 종료되면 지역 변수가 사라집니다. 함수가 다시 호출되면 새 지역 변수가 생성됩니다.

대부분의 경우 이것은 훌륭하게 작동합니다. 따라서 함수는 자급자족하며 호출될 때마다 항상 같은 방식으로 작동합니다.

그러나 함수 호출 사이에 값을 "기억"하는 지역 변수를 만드는 것이 편리한 상황이 있습니다. 이러한 변수를 정적이라고 합니다.

함수에서 정적 변수를 생성하려면 변수 이름 앞에 static 키워드를 사용하고 초기 값을 지정해야 합니다. 예를 들어:

함수 myFunction() (정적 $myVariable = 0;)

정적 변수를 사용하는 것이 편리한 상황을 고려하십시오. 호출될 때 위젯을 생성하고 이미 생성된 위젯의 수를 출력하는 함수를 생성한다고 가정해 봅시다. 지역 변수를 사용하여 다음과 같은 코드를 작성할 수 있습니다.


"; echo createWidget() . " 우리는 이미 생성했습니다.
"; echo createWidget() . " 이미 생성했습니다.>
"; ?>

그러나 $numWidgets 변수는 함수가 호출될 때마다 생성되기 때문에 다음과 같은 결과를 얻습니다.

일부 위젯을 생성합니다... 1 이미 생성했습니다. 1 이미 만들었습니다. 1 이미 만들었습니다.

그러나 정적 변수를 사용하면 한 함수 호출에서 다음 함수 호출까지 값을 유지할 수 있습니다.

"; echo createWidget() . " 우리는 이미 생성했습니다.
"; echo createWidget() . " 우리는 이미 생성했습니다.
"; echo createWidget() . " >이미 생성했습니다.
"; ?>

이제 스크립트는 예상 결과를 생성합니다.

일부 위젯을 생성합니다... 1 이미 생성했습니다. 2 우리는 이미 만들었습니다. 3 이미 만들었습니다.

정적 변수는 함수 호출 사이에 값을 유지하지만 스크립트가 실행되는 동안에만 유효합니다. 스크립트가 실행을 완료하면 모든 정적 변수와 지역 및 전역 변수가 소멸됩니다.

그게 다야! PHP 문서를 자주 참조하십시오.

확실히 집에 옷장이나 서랍장이 있습니다. 사용 원칙은 간단합니다. 지금 당장은 필요하지 않지만 잠시 후 필요할 수 있는 물건을 거기에 두는 것입니다.

변수는 정확히 같은 방식으로 정렬됩니다. 당신은 그들에 약간의 가치를 넣고 필요할 때까지 거기에 저장할 수 있습니다.

변수 생성

다음과 같이 변수에 값을 넣을 수 있습니다.

위의 코드에서 우리는 $name 변수를 생성하고 거기에 값 Ivan을 넣은 다음 $age 변수를 생성하고 값 20을 할당했습니다.

"변수"라는 이름은 스크립트 실행 중에 값이 변경될 수 있음을 의미합니다.

일부 언어에서는 변수를 사용하기 전에 먼저 "선언"해야 합니다. PHP에는 선언이 없습니다. 변수는 값을 입력하는 순간 생성됩니다.
그러나 PHP 프로그래머는 종종 "변수 생성" 대신 "변수 선언"이라고 말합니다.

또한, "변수에 값을 넣다" 대신에 "값을 할당하다"라고 합니다.
이유는 간단합니다. 변수에 값을 저장하는 기호 = 를 "할당 연산자"라고 합니다. 따라서 "할당"이라는 용어.

변수 명명 규칙

1. 변수 이름은 $ 기호로 시작합니다.

2. 두 번째 문자는 문자 또는 밑줄이 될 수 있습니다 _

변수 이름은 대소문자를 구분합니다. $name과 $Name은 다른 변수입니다.

화면에 변수 값 표시

이미 알려진 echo 명령을 사용하여 변수를 표시할 수 있습니다.

echo 명령을 사용하면 한 번에 여러 값을 표시할 수 있습니다.

echo에 2개의 값을 전달했으며 쉼표로 구분했습니다. 따라서 원하는 만큼 값을 전달할 수 있습니다. 다음 두 예는 동일한 결과를 생성합니다.

또한 PHP에는 변수를 출력하기 위한 단축 구문이 있습니다. 대신에

PHP 5.4 이전에는 단축 구문이 PHP 설정에서 short_open_tag 지시문이 활성화되었을 때만 작동했으며, 이를 통해 단축된 여는 태그도 사용할 수 있었습니다.

변수 값 확인

echo 명령은 변수의 현재 값을 확인하는 데 항상 편리한 것은 아닙니다. 예를 들어 빈 문자열 ""을 표시하려고 하면 화면에 아무 것도 표시되지 않습니다. 빈 변수 또는 작동하지 않는 코드에서 이유가 무엇인지 명확하지 않습니다.

따라서 var_dump() 함수는 변수 값을 확인하는 데 사용됩니다.

스크립트 실행 결과:

문자열(5) "바샤" 문자열(0) ""

보시다시피 PHP는 변수의 내용뿐만 아니라 문자의 수와 변수의 유형(문자열)까지 출력합니다. 다음 강의에서 데이터 유형에 대해 자세히 살펴보겠습니다.

변수 제거

unset() 함수를 사용하여 기존 변수를 제거할 수 있습니다.

그리고 이제 조금 연습할 시간입니다.

거의 모든 PHP 문제에는 여러 솔루션이 있을 수 있음을 기억하십시오. 따라서 귀하의 결정이 이 사이트에 작성된 것과 다르다고 해서 귀하가 잘못된 행동을 했다는 의미는 아닙니다.

다음과 같은 스크립트를 작성하십시오.
1. 제목, 내용 및 일부 값이라는 이름의 변수를 생성합니다.
2. h1 태그 내부의 title 변수 값과 div 태그 내부의 content 변수 값을 표시합니다.

솔루션 표시

", $제목, ""; 에코"

", $콘텐츠, "
"; ?>

이 결정이 옳은 결정이 아니라는 사실에 다시 한 번 주의를 기울이고 싶습니다. 예를 들어 다음 코드는 동일한 결과를 생성합니다.

13년 전

조심해야 할 작은 문제:

만약 너라면 끄다 RegisterGlobals 및 관련, get_defined_vars()를 사용하면 다음과 같은 내용을 볼 수 있습니다.

정렬
[ 글로벌 ] => 배열
[ 글로벌 ] => 배열
* 재귀 *
[_POST] => 배열()
[_GET] => 배열()
[_COOKIE] => 배열()
[ _FILES ] => 배열()
)

[_POST] => 배열()
[_GET] => 배열()
[_COOKIE] => 배열()
[ _FILES ] => 배열()

)
?>

$_SERVER가 거기에 없음을 주목하세요. PHP는 그것이 어딘가에서 사용되는 경우에만 슈퍼글로벌 $_SERVER를 로드하는 것 같습니다. 다음과 같이 할 수 있습니다:

인쇄"

" .htmlspecialchars(print_r(get_defined_vars(), true )) . "
" ;
인쇄"
" .htmlspecialchars (print_r ($_SERVER , true )) . "
" ;
?>

그러면 $_SERVER가 두 목록에 모두 나타납니다. 어느 쪽이든 나쁜 일이 일어나지 않을 것이기 때문에 "실제로 문제가되지는 않지만 흥미로운 호기심"이라고 생각합니다.

6 년전

get_defined_vars()는 함수를 호출한 지점에서만 변수를 가져오기 때문에 현재 범위 내에서 정의된 변수를 가져오는 간단한 방법이 있습니다.

// PHP 스크립트의 맨 위
$vars = get_defined_vars();

// 이제 할 일을 하세요.
$foo = "후우" ;
$bar = "막대" ;

// 현재 범위에 정의된 모든 변수 가져오기
$vars = array_diff(get_defined_vars(), $vars);

에코 "

"
;
print_r($vars);
에코 "
" ;
?>

15 년 전

다음은 디스플레이 또는 이메일에 대한 디버그 보고서를 생성하는 기능입니다.
get_defined_vars를 사용합니다. 없이 상세한 스냅샷을 얻는 데 좋습니다.
사용자 입력에 의존.

function generateDebugReport ($method , $defined_vars , $email = "undefined" )(
// 표시하거나 이메일로 보낼 디버그 보고서를 만드는 함수입니다.
// 사용법: generateDebugReport(method,get_defined_vars(),email);
// 여기서 method는 "browser" 또는 "email"입니다.

// "get_defined_vars"에서 반환된 키에 대한 무시 목록을 만듭니다.
// 예를 들어 HTTP_POST_VARS, HTTP_GET_VARS 등은
// 중복(_POST, _GET과 동일)
// 보안상의 이유로 무시하려는 변수도 포함합니다. PHPSESSID.
$ignorelist =array("HTTP_POST_VARS" , "HTTP_GET_VARS" ,
"HTTP_COOKIE_VARS" , "HTTP_SERVER_VARS" ,
"HTTP_ENV_VARS" , "HTTP_SESSION_VARS" ,
"_ENV" , "PHPSESSID" , "SESS_DBUSER" ,
"SESS_DBPASS" , "HTTP_COOKIE" );

$timestamp = date("m/d/y h:m:s" );
$message = "디버그 보고서 생성 $timestamp \n" ;

// 좋은 측정을 위해 마지막 SQL 오류를 가져옵니다. 여기서 $link는 리소스 식별자입니다.
// mysql_connect용. 데이터베이스 또는 추상화 설정을 주석 처리하거나 수정하십시오.
글로벌 $link ;
$sql_error = mysql_error($link);
if($sql_error )(
$message .= "\nMysql 메시지:\n" . mysql_error($link);
}
// MySQL 종료

// 여기서 재귀 함수를 사용할 수 있습니다. 당신은 아이디어를 얻을 ;-)
foreach($defined_vars as $key => $val )(
if(is_array($val) && !in_array($key, $ignorelist) && 개수($val) > 0 )(
$message .= "\n $key 배열(키=값):\n" ;
foreach($subkey로서의 $val => $subval )(
if(! in_array ($subkey , $ignorelist ) && ! is_array ($subval ))(
$message .= $subkey . "=" . $subval . "\N" ;
}
elseif(! in_array($subkey, $ignorelist) && is_array($subval))(
foreach($subval as $subsubkey => $subsubval )(
if(! in_array ($subsubkey , $ignorelist ))(
$message .= $subsubkey . "=" . $하위발 . "\N" ;
}
}
}
}
}
그렇지 않으면(!
is_array($val) && ! in_array ($key , $ignorelist ) && $val )(
$message .= "\n변수" . $키. "=" . $val. "\N" ;
}
}

If($method == "브라우저" )(
에코 nl2br($메시지);
}
elseif($method == "이메일" )(
if($이메일 == "정의되지 않음" )(
$이메일 = $_SERVER["SERVER_ADMIN"];
}

$mresult = mail($email , " 디버그 보고서 " . $_ENV [ "HOSTNAME" ]. "" , $message );
if($mresult == 1 )(
에코 "디버그 보고서가 성공적으로 전송되었습니다.\n";
}
또 다른(
에코 "디버그 보고서를 보내지 못했습니다.\n";
}
}
}
?>

17년 전

get_defined_vars 개체를 XML로 변환하는 간단한 루틴입니다.

함수 obj2xml($v, $indent = "")(
동안 (list($key , $val ) = 각각 ($v )) (
if ($key == "__attr" ) 계속;
// __attr 확인
if (is_object ($val -> __attr)) (
while (list($key2 , $val2 ) = 각각 ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
그렇지 않으면 $attr = "" ;
if (is_array($val) || is_object($val))(
print(" $ 들여쓰기< $key$attr >\N");
obj2xml($val , $indent . " " );
print(" $ 들여쓰기\N");
}
else print(" $ 들여쓰기< $key$attr >$val\N");
}
}

//예제 객체
$x -> 이름 -> 첫 번째 = "존" ;
$x -> 이름 -> 마지막 = "스미스" ;
$x -> arr [ "과일" ] = "바나나" ;
$x -> arr [ "채소" ] = "당근" ;
$y -> 고객 = $x ;
$y -> 고객 -> __attr -> id = "176C4" ;

$z = get_defined_vars();
obj2xml($z["y"]);
?>
출력합니다:


남자
스미스


바나나
당근

11년 전

참고로 get_defined_vars()는 변수 참조 집합을 반환하지 않습니다(내가 원하는 대로). 예를 들어:

// 변수 정의
$my_var = "후" ;

// 정의된 변수 목록을 가져옵니다.
$defined_vars = get_defined_vars();

// 이제 반환된 배열을 통해 값을 변경하려고 합니다.
$defined_vars [ "my_var" ] = "막대" ;

echo $my_var , "\n" ;

?>

"foo"(원래 값)를 출력합니다. "get_defined_vars()에 참조로 만들기 위한 선택적 인수가 있으면 좋겠지만 다소 전문화된 요청이라고 생각합니다. 다음과 같이 직접(편리하지 않게) 수행할 수 있습니다.

$defined_vars = 배열();
$var_names = array_keys(get_defined_vars());

foreach($var_names를 $var_name으로)
{
$defined_vars [ $var_name ] =& $ $var_name ;
}

?>

1 년 전

get_defined_vars에 있는 "이것"에 대해 이전에 여기에 게시했습니다.

"항상 존재하는 것은 아니지만 어떤 경우에는 설명할 수 없을 정도로 나타날 것입니다.

PHP -r"
클래스 테스트(
공개 함수 a() (var_dump(array_keys(get_defined_vars()));$a = 123;)
공개 함수 b() (var_dump(array_keys(get_defined_vars()));$this;)
}
$t = 새로운 테스트();
$t->a();
$t->b();
"

정렬()
배열("이것")

이것은 PHP 7.2에서는 발생하지 않지만 PHP 5.6에서는 발생합니다.

1 년 전

여기에서 일부 주석은 이 함수가 참조를 반환하지 않을 것이라고 지적합니다. 그러나 이름을 반환하고 이름은 "참조"입니다.

나는 그것을 참조로 변환하는 제안을 여기에서 권장하지 않습니다.

공개 함수 x($a, $b, $c) (
foreach(array_keys(get_defined_vars()) as $key)
if($key !== "이것")
$this->y($($key));
}

공개 함수 y(&$input) (
$입력++;
}

$() 대신 $$를 사용할 수도 있습니다.

나는 매우 일반적인 코드를 만들기 위해 내 시간에 몇 가지 기발한 일을 했지만 위와 같은 작업을 수행할 필요가 없었습니다. 작동하지 않을 수도 있습니다(그러나 $a[$key]와 다르지 않기 때문에 해야 함).

$$key++도 할 수 있지만 끔찍하게 나쁘지 않은 코드를 본 적이 없습니다(동적 사용이 도움이 되지 않는 경우 동적 사용).

그런 일을 하고 있다면 추가 조사를 하십시오.