PHP에서 변수는 변수명 앞에 달러사인을 덧붙여 표현된다. 변수명은 대소문자를 구별한다.
PHP에서 변수명은 다음 규칙을 따른다. 유효한 변수명은 문자나 밑줄로 시작하고, 그 뒤에 문자, 숫자, 밑줄이 붙을수 있다. 정규표현식으로 표현하면 다음과 같다: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
Note: 여기서 문자는 a-z, A-Z, 그리고 127부터 255까지(0x7f-0xff) 바이트를 의미합니다.
Note: $this은 특수 변수로, 할당할 수 없습니다.
변수 관련 함수는, 변수 관련 함수 레퍼런스를 참고하십시오.
<?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 ASCII 228.
?>
기본값으로, 변수는 항상 값에 의해 할당되어야 합니다. 변수를 표현식으로 지정할때에 원래 표현식의 모든 값이 목표 변수로 복사된다. 이 말의 의미는 예를 들면, 어떤 변수값을 다른 변수로 지정한 후에, 그 변수중 어떤 하나를 변경하는것이 다른 변수에 영향을 미치지 않는다는 의미를 갖는다. 이런 종류의 지정에 대해서 표현식을 참고.
또한, 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()등에서 사용)은 빈 문자열로 설정되고, 배열은 빈 배열로 설정됩니다.
Example #1 초기화되지 않은 변수의 기본값
<?php
// 설정되지 않고 참조되지 않은 (사용되지 않은) 변수; NULL 출력
var_dump($unset_var);
// 논리 사용; 'false' 출력 (이 구문에 대한 설명은 3항 연산자를 참고하십시오)
echo($unset_bool ? "true\n" : "false\n");
// 문자열 사용; 'string(3) "abc"' 출력
$unset_str .= 'abc';
var_dump($unset_str);
// 정수 사용; 'int(25)' 출력
$unset_int += 25; // 0 + 25 => 25
var_dump($unset_int);
// 소수 사용; 'float(1.25)' 출력
$unset_float += 1.25;
var_dump($unset_float);
// 배열 사용; array(1) { [3]=> string(3) "def" } 출력
$unset_arr[3] = "def" // array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);
// 객체 사용; 새 stdClass 객체 생성 (http://www.php.net/manual/kr/reserved.classes.php 참고)
// 출력: object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" }
$unset_obj->foo = 'bar';
var_dump($unset_obj);
?>
초기화되지 않은 변수의 기본값에 의존하는 것은, 같은 변수명을 사용하는 파일을 포함하는 등에서 문제가 될 수 있습니다. 또한, register_globals를 켜놓은 상태에서 주요한 보안 위험입니다. 초기화되지 않은 변수를 사용할 때 E_NOTICE 등급의 오류가 발생하지만, 초기화되지 않은 배열에 원소를 추가할 때는 발생하지 않습니다. isset() 언어 구조로 변수가 초기화되었는지 확인 할 수 있습니다.