기본문법

PHP에서 변수는 달러 기호 다음에 변수 이름으로 표시됩니다. 변수 이름은 대소문자를 구분합니다.

변수 이름은 PHP의 다른 레이블과 동일한 규칙을 따릅니다. 유효한 변수 이름은 문자 또는 밑줄로 시작하고 그 뒤에 임의의 수의 문자, 숫자 또는 밑줄이 옵니다. 정규식으로 다음과 같이 표현됩니다. ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$

참고: 여기에서 문자는 a-z, A-Z 및 128에서 255(0x80-0xff)의 바이트입니다.

참고: $this는 할당할 수 없는 특수 변수입니다. PHP 7.1.0 이전에는 간접 할당(예: 변수 변수 사용)이 가능했습니다.

Userland Naming Guide도 참조하십시오.

변수 관련 함수에 대한 정보는 변수 함수 참조를 참조하십시오.

                  
<?php
$var = 'Bob';
$Var = 'Joe';
echo "$var, $Var";      // outputs "Bob, Joe"

$4site = 'not yet';     // invalid; starts with a number
$_4site = 'not yet';    // valid; starts with an underscore
$täyte = 'mansikka';    // valid; 'ä' is (Extended) ASCII 228.
?>
                  
                

기본적으로 변수는 항상 값으로 할당됩니다. 즉, 변수에 표현식을 할당하면 원래 표현식의 전체 값이 대상 변수에 복사됩니다. 예를 들어, 한 변수의 값을 다른 변수에 할당한 후 해당 변수 중 하나를 변경해도 다른 변수에는 영향을 미치지 않습니다. 이러한 종류의 할당에 대한 자세한 내용은 Expressions에 대한 장을 참조하십시오.

PHP는 또한 변수에 값을 할당하는 또 다른 방법인 참조로 할당을 제공합니다. 이는 새 변수가 단순히 원래 변수를 참조(즉, "에 대한 별칭이 됨" 또는 "가리키는")한다는 것을 의미합니다. 새 변수에 대한 변경 사항은 원본에 영향을 미치며 그 반대의 경우도 마찬가지입니다.

참조로 할당하려면 할당되는 변수(소스 변수)의 시작 부분에 앰퍼샌드(&)를 추가하기만 하면 됩니다. 예를 들어 다음 코드 조각은 'My name is Bob'을 두 번 출력합니다.

                  
<?php
$foo = 'Bob';              // Assign the value 'Bob' to $foo
$bar = &$foo;              // Reference $foo via $bar.
$bar = "My name is $bar";  // Alter $bar...
echo $bar;
echo $foo;                 // $foo is altered too.
?>
                  
                

한 가지 중요한 점은 명명된 변수만 참조로 할당할 수 있다는 것입니다.

                  
<?php
$foo = 25;
$bar = &$foo;      // This is a valid assignment.
$bar = &(24 * 7);  // Invalid; references an unnamed expression.

function test()
{
   return 25;
}

$bar = &test();    // Invalid.
?>
                  
                

PHP에서 변수를 초기화 할 필요는 없지만, 초기화는 매우 좋은 습관입니다. 초기화되지 않은 변수는 자료형과 사용되는 위치에 따라서 기본값을 가집니다 - 논리 기본값은 FALSE, 정수형과 소수형은 0, 문자열(echo등에서 사용)은 빈 문자열로 설정되고, 배열은 빈 배열로 설정됩니다.

예제 #1 초기화되지 않은 변수의 기본값

                  
<?php
// Unset AND unreferenced (no use context) variable; outputs NULL
var_dump($unset_var);

// Boolean usage; outputs 'false' (See ternary operators for more on this syntax)
echo($unset_bool ? "true\n" : "false\n");

// String usage; outputs 'string(3) "abc"'
$unset_str .= 'abc';
var_dump($unset_str);

// Integer usage; outputs 'int(25)'
$unset_int += 25; // 0 + 25 => 25
var_dump($unset_int);

// Float/double usage; outputs 'float(1.25)'
$unset_float += 1.25;
var_dump($unset_float);

// Array usage; outputs array(1) {  [3]=>  string(3) "def" }
$unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);

// Object usage; creates new stdClass object (see reserved.classes.php)
// Outputs: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$unset_obj->foo = 'bar';
var_dump($unset_obj);
?>
                  
                

초기화되지 않은 변수의 기본값에 의존하는 것은 동일한 변수 이름을 사용하는 다른 파일에 한 파일을 포함하는 경우 문제가 됩니다. E_NOTICE 레벨 오류는 초기화되지 않은 변수로 작업하는 경우 발생하지만 초기화되지 않은 배열에 요소를 추가하는 경우에는 발생하지 않습니다. isset() 언어 구성을 사용하여 변수가 이미 초기화되었는지 감지할 수 있습니다.