반응형
산술 연산자(arithmetic operator)
- 산술 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽이다.

$num_01 = 10;
$num_02 = 4;
echo "+ 연산자에 의한 결괏값은 ".($num_01 + $num_02)."입니다.<br>"; // 14
echo "- 연산자에 의한 결괏값은 ".($num_01 - $num_02)."입니다.<br>"; // 6
echo "* 연산자에 의한 결괏값은 ".($num_01 * $num_02)."입니다.<br>"; // 40
echo "/ 연산자에 의한 결괏값은 ".($num_01 / $num_02)."입니다.<br>"; // 2.5
echo "% 연산자에 의한 결괏값은 ".($num_01 % $num_02)."입니다."; // 2
연산자의 우선순위(operator precedence)와 결합 방향(associativity)
- 우선순위가 빠른 연산자가 가장 먼저 실행되고, 같은 우선순위를 가지는 연산자가 둘 이상 있을 때에는 결합 순서에 따라 실행 순서가 결정된다.
| 1 | new | 객체의 생성 | - |
| clone | 객체의 복제 | - | |
| 2 | [] | 배열 | 왼쪽에서 오른쪽으로 |
| 3 | ++ | 증가 연산자 | - |
| -- | 감소 연산자 | - | |
| 4 | (타입) | 타입 캐스트 연산자 | - |
| ~ | 비트 NOT 연산자 | - | |
| - | 음의 부호 (단항 연산자) | - | |
| 5 | instanceof | 객체 | - |
| 6 | ! | 논리 NOT 연산자 | 오른쪽에서 왼쪽으로 |
| 7 | * | 곱셈 연산자 | 왼쪽에서 오른쪽으로 |
| / | 나눗셈 연산자 | 왼쪽에서 오른쪽으로 | |
| % | 나머지 연산자 | 왼쪽에서 오른쪽으로 | |
| 8 | + | 덧셈 연산자 | 왼쪽에서 오른쪽으로 |
| - | 뺄셈 연산자 | 왼쪽에서 오른쪽으로 | |
| 9 | << | 비트 왼쪽 시프트 연산자 | 왼쪽에서 오른쪽으로 |
| >> | 비트 오른쪽 시프트 연산자 | 왼쪽에서 오른쪽으로 | |
| 10 | < | 관계 연산자(보다 작은) | - |
| <= | 관계 연산자(보다 작거나 같은) | - | |
| > | 관계 연산자(보다 큰) | - | |
| >= | 관계 연산자(보다 크거나 같은) | - | |
| <> | 관계 연산자(와 같지 않은) | - | |
| 11 | == | 관계 연산자(와 같은) | - |
| === | 관계 연산자(와 같고 같은 타입) | - | |
| != | 관계 연산자(와 같지 않은) | - | |
| !== | 관계 연산자(와 같지 않거나 다른 타입) | - | |
| 12 | & | 비트 AND 연산자 | 왼쪽에서 오른쪽으로 |
| 13 | ^ | 비트 XOR 연산자 | 왼쪽에서 오른쪽으로 |
| 14 | | | 비트 OR 연산자 | 왼쪽에서 오른쪽으로 |
| 15 | && | 논리 AND 연산자 | 왼쪽에서 오른쪽으로 |
| 16 | || | 논리 OR 연산자 | 왼쪽에서 오른쪽으로 |
| 17 | ? : | 삼항 연산자 | 오른쪽에서 왼쪽으로 |
| 18 | = | 대입 연산자 | 오른쪽에서 왼쪽으로 |
| += | 복합 대입 연산자(덧셈) | 오른쪽에서 왼쪽으로 | |
| -= | 복합 대입 연산자(뺄셈) | 오른쪽에서 왼쪽으로 | |
| *= | 복합 대입 연산자(곱셈) | 오른쪽에서 왼쪽으로 | |
| /= | 복합 대입 연산자(나눗셈) | 오른쪽에서 왼쪽으로 | |
| %= | 복합 대입 연산자(나머지) | 오른쪽에서 왼쪽으로 | |
| .= | 복합 대입 연산자(문자열 추가) | 오른쪽에서 왼쪽으로 | |
| <<= | 복합 대입 연산자(비트 왼쪽 시프트) | 오른쪽에서 왼쪽으로 | |
| >>= | 복합 대입 연산자(비트 오른쪽 시프트) | 오른쪽에서 왼쪽으로 | |
| &= | 복합 대입 연산자(비트 AND) | 오른쪽에서 왼쪽으로 | |
| |= | 복합 대입 연산자(비트 OR) | 오른쪽에서 왼쪽으로 | |
| ^= | 복합 대입 연산자(비트 XOR) | 오른쪽에서 왼쪽으로 | |
| 19 | and | 논리 AND 연산자 | 왼쪽에서 오른쪽으로 |
| 20 | xor | 논리 XOR 연산자 | 왼쪽에서 오른쪽으로 |
| 21 | or | 논리 OR 연산자 | 왼쪽에서 오른쪽으로 |
| 22 | , | 쉼표 연산자 | 왼쪽에서 오른쪽으로 |
대입 연산자(assignment operator)
- 대입 연산자는 변수에 값을 대입할 때 사용하는 이항 연산자이며, 피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.

복합 대입 연산자
- PHP에서는 대입 연산자와 산술 연산자 등을 결합한 다양한 복합 대입 연산자를 제공한다.
- 복합 대입 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.
| += | 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 왼쪽의 피연산자에 대입함. |
| -= | 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 왼쪽의 피연산자에 대입함. |
| *= | 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 왼쪽의 피연산자에 대입함. |
| /= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 왼쪽의 피연산자에 대입함. |
| %= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입함. |
| .= | 왼쪽 피연산자의 문자열에 오른쪽 피연산자의 문자열을 추가한 후, 왼쪽의 피연산자에 대입함. |
| <<= | 왼쪽의 피연산자의 비트를 오른쪽의 피연산자만큼 전부 왼쪽으로 이동시킨 후, 그 결과를 왼쪽의 피연산자에 대입함 |
| >>= | 왼쪽의 피연산자의 비트를 부호를 유지하면서 오른쪽의 피연산자만큼 전부 오른쪽으로 이동시킨 후, 그 결과를 왼쪽의 피연산자에 대입함. |
| &= | 왼쪽의 피연산자와 오른쪽의 피연산자의 논리식이 모두 true면 왼쪽 피연산자에 true을 대입하고, 그 외에는 false을 대입함. |
| |= | 왼쪽의 피연산자나 오른쪽의 피연산자의 논리식 중 하나라도 true면 왼쪽 피연산자에 true을 대입하고, 그 외에는 false을 대입함. |
| ^= | 왼쪽 피연산자의 논리식과 오른쪽 피연산자의 논리식이 서로 다르면 왼쪽 피연산자에 true을 대입하고, 그 외에는 false을 대입함. |
$num_01 = 7;
$num_02 = 7;
$num_03 = 7;
echo "- 연산자에 의한 결괏값은 ".($num_01 = $num_01 - 5)."입니다.<br>"; // 2
echo "-= 연산자에 의한 결괏값은 ".($num_02 -= 5)."입니다.<br>"; // 2
echo "=- 연산자에 의한 결괏값은 ".($num_03 =- 5)."입니다."; // -5
증감 연산자(increment and decrement operator)
- 증감 연산자는 피연산자를 1씩 증가 혹은 감소시킬 때 사용하는 연산자다. 이 연산자는 피연산자가 단 하나뿐인 단항 연산자로, 증감 연산자는 해당 연산자가 피연산자의 어느 쪽에 위치하는가에 따라 연산의 순서 및 결과가 달라다.

$num_01 = 7;
$num_02 = 7;
echo "++\\$num_01 에 의한 결괏값은 ".(++$num_01 - 5)."이고, 변수의 값은 {$num_01}로 변했습니다.<br>";
echo "\\$num_02++ 에 의한 결괏값은 ".($num_02++ - 5)."이고, 변수의 값은 {$num_02}로 변했습니다.";
// ++\7 에 의한 결괏값은 3이고, 변수의 값은 8로 변했습니다.
// \7++ 에 의한 결괏값은 2이고, 변수의 값은 8로 변했습니다.
$x = 10;
$y = $x-- + 5 + --$x;
echo "변수 \\$x 의 값은 ".$x."이고, 변수 \\$y 의 값은 ".$y."으로 변경되었습니다.";
// 변수 \8 의 값은 8이고, 변수 \23 의 값은 23으로 변경되었습니다.
비교 연산자(comparison operator)
- 비교 연산자는 피연산자 사이의 상대적인 크기를 판단하여, 참(true)과 거짓(false)을 반환한다.
- 비교 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽이다.

- !=와 <> 연산자는 정확히 같은 동작을 하며, 연산자의 우선순위에서만 차이가 발생한다.
$num_01 = 3;
$num_02 = 3.0;
$num_03 = 3;
var_dump($num_01 == $num_02); // true
var_dump($num_01 === $num_02); // false
var_dump($num_01 != $num_03); // false
다양한 타입의 비교
| 피연산자1 | 피연산자2 | 비교 규칙 |
| bool, null | 모두 | 둘 다 불리언으로 변환한 후 비교함. (false < true) |
| string, resource, integer, float |
string, resource, integer, float |
숫자로 시작하는 문자열과 리소스는 숫자로 변환한 후 비교함. |
| object | object | 내장 클래스는 자신의 비교 함수를 정의할 수 있으나, 다른 클래스끼리 비교할 수는 없음. |
| array | array | 배열끼리의 비교는 같은 키를 가지는 값을 서로 비교함. 이때 피연산자1 배열의 키가 피연산자2 배열에 존재하지 않으면 비교할 수 없으며, 배열 요소의 수가 적은 쪽이 작은 거로 판단됨. |
| array | 모두 | 배열이 항상 큰 거로 판단됨. |
| object | 모두 | 객체가 항상 큰 거로 판단됨. |
var_dump(0 < true); // true
var_dump("123abc" == 123); // true
var_dump("123abc" === 123); // false
$arr_01 = array("a" => 10);
$arr_02 = array("a" => 5);
$arr_03 = array("a" => 5, "c" => 7);
var_dump($arr_01 >= $arr_02); // true, 배열의 길이가 같은 경우에는 같은 키를 가지는 값을 서로 비교
var_dump($arr_01 >= $arr_03); // false, 배열의 길이가 다른 경우에는 배열 요소의 수가 적은 쪽이 작다고 판단
var_dump("문자열" < $arr_01); // true, 배열이랑 다른 타입을 비교하면, 언제나 배열이 크다고 판단
논리 연산자(logical operator)
- 논리 연산자는 논리식을 판단하여, 참(true)과 거짓(false)을 반환한다.
- and, or, xor 연산자는 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽이다.
- ! 연산자는 피연산자가 단 하나뿐인 단항 연산자이며, 피연산자의 결합 방향은 오른쪽에서 왼쪽이다.
- and와 && 연산자, or와 || 연산자는 정확히 같은 동작을 하며, 연산자의 우선순위에서만 차이가 발생다.

$num_01 = true;
$num_02 = false;
var_dump($num_01 and $num_02); // true and false -> false
var_dump($num_01 or $num_02); // true or false -> true
var_dump($num_01 xor $num_02); // true xor false -> true
var_dump( (3 < 5) or ("12" > 20) ); // true or false -> true
비트 연산자(bitwise operator)
- 비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 수행한다. 또한, 비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용한다.





$num_01 = 15;
$num_02 = 8;
echo "~ 연산자에 의한 결괏값은 ".(~$num_01)."입니다.<br>"; // 1의 보수
① echo "<< 연산자에 의한 결괏값은 ".($num_02<<1)."입니다.<br>"; // 곱하기 2
② echo ">> 연산자에 의한 결괏값은 ".($num_02>>1)."입니다."; // 나누기 2
비트 연산자(bitwise operator)
- 물음표(?) 앞의 표현식에 따라 결괏값이 참이면 반환값 1을 반환하고, 결괏값이 거짓이면 반환값 2를 반환다.
조건식 ? 반환값1 : 반환값2
$num_01 = 15;
$num_02 = 8;
$result = ($num_01 > $num_02) ? $num_01 : $num_02;
echo "둘 중에 더 큰수는 {$result}입니다.";
문자열 연산자(string operator)
- PHP에서 문자열 연산자(.)를 사용하여 문자열을 연결할 수 있다. 이 연산자는 얼핏 보기에는 연산자가 아닌 것처럼 보이지만 양쪽에 위치한 두 문자열을 연결해 주는 역할을 한다.
- echo() 함수에서는 쉼표 연산자(,)를 이용하여 문자열을 연결할 수 있다.
$str_01 = "PHP 수업";
$str_02 = "에 오신것을 환영합니다!";
echo "두 문자열을 합친 문자열은 '".($str_01.$str_02)."'입니다.<br>";
echo $str_01, $str_02;
// 두 문자열을 합친 문자열은 'PHP 수업에 오신것을 환영합니다!'입니다.
// PHP 수업에 오신것을 환영합니다!
배열 합집합 연산자(array union operator)
- 배열 합집합 연산자(+)는 피연산자로 오는 두 배열의 합집합을 반환한다.
- 왼쪽 피연산자로 오는 배열의 키값은 유지하면서, 거기에 맞춰 오른쪽 피연산자로 오는 배열을 덧붙이는 방식이다. 따라서 같은 키에 대한 값에는 왼쪽 피연산자로 오는 배열의 값이 저장된다.
$arr_01 = array("1st" => "PHP", "2nd" => "MySQL");
$arr_02 = array("1st" => "HTML", "2nd" => "CSS", "3rd" => "JavaScript");
$result_01 = $arr_01 + $arr_02; // [PHP, MySQL, JavaScript]
var_dump($result_01);
$result_02 = $arr_02 + $arr_01; // [HTML, CSS, JavaScript]
var_dump($result_02);
- 인덱스를 가지는 배열에서도 배열 합집합 연산은 같은 결과를 반환한다
$arr_01 = array("PHP", "MySQL");
$arr_02 = array("HTML", "CSS", "JavaScript");
$result_01 = $arr_01 + $arr_02; // [PHP, MySQL, JavaScript]
var_dump($result_01);
$result_02 = $arr_02 + $arr_01; // [HTML, CSS, JavaScript]
var_dump($result_02);
instanceof 연산자
- instanceof 연산자는 다음과 같은 사항을 확인하고자 할 때 사용할 수 있다.
- 해당 변수가 어떤 클래스(class)에서 생성된 객체(object)인지를 확인할 때
- 해당 변수가 부모 클래스(parent class)에서 상속받은 클래스인지를 확인할 때
- 해당 변수가 클래스의 인스턴스(instance)인지 아닌지를 확인할 때
- 해당 변수가 인터페이스(interface)로 구현한 클래스의 객체 인스턴스(object instance)인지 아닌지를 확인할 때
interface Interface01
{}
class Class01
{}
class Class02 extends Class01 implements Interface01
{}
/* 어떤 클래스(class)에서 생성된 객체(object)인지를 확인할 때 */
$var_01 = new Class01; // Class01 클래스 객체를 생성
var_dump($var_01 instanceof Class01); // true
var_dump($var_01 instanceof Class02); // false
/* 부모 클래스(parent class)에서 상속받은 클래스인지를 확인할 때 */
$var_02 = new Class02; // Class02 클래스 객체를 생성
var_dump($var_02 instanceof Class01); // true
var_dump($var_02 instanceof Class02); // true
/* 클래스의 인스턴스(instance)인지 아닌지를 확인할 때 */
$var_03 = new Class01; // Class01 클래스 객체를 생성
var_dump(!($var_03 instanceof Class02)); // true
/* 인터페이스(interface)로 구현한 클래스의 객체 인스턴스(object instance)인지 아닌지를 확인할 때 */
$var_04 = new Class02; // Class02 클래스 객체를 생성
var_dump($var_04 instanceof Class02); // true
var_dump($var_04 instanceof Interface01); // true
Reference
반응형
'Language > Php' 카테고리의 다른 글
| [Php] 제어문: 조건문, 반복문, 기타 제어문 (0) | 2025.10.24 |
|---|---|
| [Php] 기초: 변수 선언/종류, 상수, 기본 타입, 타입 변환 (0) | 2025.10.23 |
| [Php] 정의, 특징, 역사, 동작 원리, 기본문법(코드 영역, 주석, 문자출력) (0) | 2025.10.22 |