표현식

표현식은 PHP의 가장 중요한 구성 요소입니다. PHP에서 작성하는 거의 모든 것이 표현식입니다. 표현식을 정의하는 가장 간단하면서도 가장 정확한 방법은 "값이 있는 모든 것"입니다.

표현식의 가장 기본적인 형태는 상수와 변수입니다. "$a = 5"를 입력하면 $a에 '5'가 할당됩니다. '5'는 분명히 값 5를 갖습니다. 즉, '5'는 값이 5인 표현식입니다(이 경우 '5'는 정수형 상수임).

이 할당 후에 $a의 값도 5가 될 것으로 예상하므로 $b = $a를 작성했다면 $b = 5를 작성한 것처럼 동작할 것으로 예상할 것입니다. 즉, $a 값도 5인 표현식입니다. 모든 것이 올바르게 작동하면 이것이 바로 일어날 것입니다.

표현식에 대한 약간 더 복잡한 예는 함수입니다. 예를 들어 다음 함수를 고려하십시오.

                  
<?php
function foo ()
{
    return 5;
}
?>
                  
                

함수의 개념에 익숙하다고 가정하고(만약 모른다면, 함수에 대한 장을 보세요), $c = foo() 를 타이핑하는 것이 본질적으로 $c = 5 를 쓰는 것과 같다고 가정할 것입니다. 함수는 반환 값의 값이 있는 표현식입니다. foo()는 5를 반환하므로 'foo()' 표현식의 값은 5입니다. 일반적으로 함수는 정적 값을 반환하는 것이 아니라 무언가를 계산합니다.

물론, PHP의 값은 정수일 필요는 없으며 매우 종종 그렇지 않은 경우가 많습니다. PHP는 4가지 스칼라 값 유형을 지원합니다: int 값, 부동 소수점 값(float), 문자열 값 및 bool 값(스칼라 값은 예를 들어 배열과 달리 더 작은 조각으로 '나눌 수 없는' 값입니다). PHP는 또한 배열과 객체의 두 가지 복합(비 스칼라) 유형을 지원합니다. 이러한 각 값 유형은 변수에 할당되거나 함수에서 반환될 수 있습니다.

PHP는 다른 많은 언어와 마찬가지로 표현식을 훨씬 더 많이 사용합니다. PHP는 거의 모든 것이 표현식이라는 점에서 표현식 지향 언어입니다. 우리가 이미 다룬 '$a = 5'의 예를 고려하십시오. 여기에 포함된 두 개의 값이 있음을 쉽게 알 수 있습니다. 정수형 상수 '5'의 값과 5로 업데이트되는 $a의 값도 마찬가지입니다. 그러나 진실은 여기에 관련된 한 가지 추가 가치가 있다는 것입니다. 그것은 할당 자체의 가치입니다. 할당 자체는 할당된 값(이 경우 5)으로 평가됩니다. 실제로는 '$a = 5'가 수행하는 작업에 관계없이 값이 5인 표현식임을 의미합니다. 따라서 '$b = ($a = 5)'는 '$a = 5; $b = 5;' (세미콜론은 문장의 끝을 표시합니다). 할당은 오른쪽에서 왼쪽으로 구문 분석되므로 '$b = $a = 5'라고 쓸 수도 있습니다.

표현 방향의 또 다른 좋은 예는 사전 및 사후 증가 및 감소입니다. PHP 및 기타 많은 언어 사용자는 variable++ 및 variable-- 표기법에 익숙할 것입니다. 증가 및 감소 연산자입니다. C와 마찬가지로 PHP에는 사전 증가와 사후 증가의 두 가지 유형의 증가가 있습니다. 사전 증가와 사후 증가는 본질적으로 변수를 증가시키며 변수에 대한 효과는 동일합니다. 차이점은 증분 표현식의 값입니다. '++$variable'로 기록된 사전 증가는 증가된 값으로 평가됩니다(PHP는 값을 읽기 전에 변수를 증가시키므로 '사전 증가'라는 이름이 지정됨). '$variable++'로 쓰여진 사후 증분은 증분되기 전에 $variable의 원래 값으로 평가됩니다(PHP는 값을 읽은 후 변수를 증분하므로 '사후 증분'이라는 이름이 지정됨).

매우 일반적인 유형의 표현식은 비교 표현식입니다. 이러한 표현식은 false 또는 true로 평가됩니다. PHP는 >(보다 큼), >=(크거나 같음), ==(같음), !=(같지 않음), <(보다 작음) 및 <=(작거나 같음)를 지원합니다. 이 언어는 또한 엄격한 동등 연산자 세트를 지원합니다: ===(동일하고 동일한 유형) 및 !==(동일하지 않거나 동일한 유형이 아님). 이러한 표현식은 if 문과 같은 조건부 실행 내에서 가장 일반적으로 사용됩니다.

여기서 다룰 표현식의 마지막 예는 결합된 연산자 할당 표현식입니다. $a를 1씩 증가시키려면 '$a++' 또는 '++$a'를 쓰면 된다는 것을 이미 알고 있습니다. 그러나 예를 들어 3과 같이 하나 이상을 추가하려면 어떻게 해야 합니까? '$a++'를 여러 번 쓸 수 있지만 이것은 분명히 매우 효율적이거나 편안한 방법이 아닙니다. 훨씬 더 일반적인 방법은 '$a = $a + 3'을 쓰는 것입니다. '$a + 3'은 $a 더하기 3의 값으로 평가되고 $a에 다시 할당되어 $a를 3씩 증가시킵니다. PHP에서는 C와 같은 다른 여러 언어에서와 같이 이것을 a로 작성할 수 있습니다. 시간이 지남에 따라 더 명확하고 빠르게 이해할 수 있습니다. $a의 현재 값에 3을 더하면 '$a += 3'으로 쓸 수 있습니다. 이것은 정확히 "$a의 값을 취하고 여기에 3을 더한 다음 $a에 다시 할당"을 의미합니다. 더 짧고 명확할 뿐만 아니라 실행 속도도 빨라집니다. '$a += 3'의 값은 일반 할당 값과 마찬가지로 할당된 값입니다. 3이 아니라 $a에 3을 더한 값을 결합한 값입니다($a에 할당된 값). 2자리 연산자는 이 연산자 할당 모드에서 사용할 수 있습니다. 예를 들어 '$a -= 5'($a 값에서 5 빼기), '$b *= 7'($b 값 곱하기 7) 등

다른 언어에서 본 적이 없다면 이상하게 보일 수 있는 표현식이 하나 더 있습니다. 삼항 조건 연산자는 다음과 같습니다.

                  
<?php
$first ? $second : $third
?>
                  
                

첫 번째 하위 표현식의 값이 true(0이 아님)이면 두 번째 하위 표현식이 평가되며 이는 조건식의 결과입니다. 그렇지 않으면 세 번째 하위 표현식이 평가되며 이것이 값입니다.

다음 예제는 일반적으로 사전 및 사후 증가 및 표현식을 더 잘 이해하는 데 도움이 됩니다.

                  
<?php
function double($i)
{
  return $i*2;
}
$b = $a = 5;        /* assign the value five into the variable $a and $b */
$c = $a++;          /* post-increment, assign original value of $a
                        (5) to $c */
$e = $d = ++$b;     /* pre-increment, assign the incremented value of
                        $b (6) to $d and $e */

/* at this point, both $d and $e are equal to 6 */

$f = double($d++);  /* assign twice the value of $d before
                      the increment, 2*6 = 12 to $f */
$g = double(++$e);  /* assign twice the value of $e after
                      the increment, 2*7 = 14 to $g */
$h = $g += 10;      /* first, $g is incremented by 10 and ends with the
                      value of 24. the value of the assignment (24) is
                      then assigned into $h, and $h ends with the value
                      of 24 as well. */
?>
                  
                

일부 표현식은 구문으로 간주될 수 있습니다. 이 경우 구문은 'expr ;' 즉, 표현식 다음에 세미콜론이 옵니다. '$b = $a = 5;'에서 '$a = 5'는 유효한 표현식이지만 그 자체로는 구문이 아닙니다. '$b = $a = 5;' 그러나 유효한 구문입니다.

마지막으로 언급할 가치가 있는 것은 표현의 진리값입니다. 주로 조건부 실행 및 루프와 같은 많은 이벤트에서 표현식의 특정 값에는 관심이 없고 그것이 참인지 거짓인지에만 관심이 있습니다. 상수 true 및 false(대소문자 구분 안 함)는 두 가지 가능한 부울 값입니다. 필요한 경우 표현식이 자동으로 부울로 변환됩니다. 방법에 대한 자세한 내용은 자료형 캐스팅에 대한 섹션을 참조하세요.

PHP는 표현식의 완전하고 강력한 구현을 제공하며, 이를 문서화하는 것은 이 매뉴얼의 범위를 완전히 벗어납니다. 위의 예는 표현식이 무엇이고 어떻게 유용한 표현식을 구성할 수 있는지에 대한 좋은 아이디어를 제공해야 합니다. 이 매뉴얼의 나머지 부분에서 우리는 유효한 PHP 표현식을 나타내기 위해 expr을 작성할 것입니다.