PHP의 변수는 달러 기호와 변수 이름으로 표시됩니다. 변수 이름은 대소문자를 구분합니다.
변수 이름은 PHP의 다른 태그와 동일한 규칙을 따릅니다. 유효한 변수 이름은 문자나 밑줄로 시작하고 그 뒤에 문자, 숫자 또는 밑줄이 옵니다. 일반 정규식에 따르면 '[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*'로 표현됩니다.
참고: 여기에 언급된 문자는 a-z, A-Z 및 127~255(0x7f-0xff)의 ASCII 문자입니다.
참고: $this는 값을 할당할 수 없는 특수 변수입니다.
cb066072a05ab5b732c9d68d6beb1439
변수는 기본적으로 항상 값으로 할당됩니다. 즉, 표현식의 값이 변수에 할당되면 원래 표현식 전체의 값이 대상 변수에 할당됩니다. 이는 예를 들어 한 변수의 값이 다른 변수에 할당될 때 한 변수의 값을 변경해도 다른 변수에 영향을 미치지 않는다는 것을 의미합니다. PHP는 변수에 값을 할당하는 또 다른 방법인 참조 할당도 제공합니다. 즉, 새 변수는 원래 변수를 단순히 참조(즉, "별칭" 또는 "가리키는") 것입니다. 새 변수를 변경하면 원래 변수에 영향을 미치며 그 반대의 경우도 마찬가지입니다. 참조 할당을 사용하려면 할당할 변수(소스 변수) 앞에 & 기호를 추가하면 됩니다. 예를 들어, 다음 코드 조각은 "My name is Bob"을 두 번 인쇄합니다.유의해야 할 중요한 점 중 하나는 명명된 변수만 참조로 할당할 수 있다는 것입니다.
<?php $foo = 'Bob'; // 将 'Bob' 赋给 $foo $bar = &$foo; // 通过 $bar 引用 $foo $bar = "My name is $bar"; // 修改 $bar 变量 echo $bar; echo $foo; // $foo 的值也被修改 ?>
PHP에서는 변수를 초기화할 필요는 없지만, 변수를 초기화하는 것은 좋은 습관입니다. 초기화되지 않은 변수는 해당 유형에 대한 기본값을 갖습니다. 부울 변수는 기본값이 FALSE이고, 정수 및 부동 소수점 변수는 기본값이 0이고, 문자열 변수(예: echo에 사용되는 변수)는 기본값이 빈 문자열이고 배열 변수의 기본값은 빈 배열입니다.
<?php $foo = 25; $bar = &$foo; // 合法的赋值 $bar = &(24 * 7); // 非法; 引用没有名字的表达式 function test() { return 25; } $bar = &test(); // 非法 ?>예제 #1 초기화되지 않은 변수의 기본값
초기화되지 않은 변수의 기본값에 의존하는 것은 경우에 따라 문제가 될 수 있습니다. 예를 들어 한 파일을 다른 파일에 포함시키면 동일한 변수 이름이 발생합니다. . 또한 Register_globals를 켜는 것은 주요 보안 위험입니다. 초기화되지 않은 변수를 사용하면 E_NOTICE 오류가 발생하지만 초기화되지 않은 배열에 요소를 추가하면 오류가 발생하지 않습니다. isset() 언어 구성을 사용하여 변수가 초기화되었는지 여부를 감지할 수 있습니다.
<?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 http://www.php.net/manual/en/reserved.classes.php) // Outputs: object(stdClass)#1 (1) { ["foo"]=> string(3) "bar" } $unset_obj->foo = 'bar'; var_dump($unset_obj); ?>