PHP Magic Constants
PHP 연산자(Operators): 종류와 사용법 완벽 가이드
PHP 연산자란 무엇인가요?
PHP 연산자는 변수와 값에 대한 연산을 수행하는 데 사용되는 기호나 단어입니다. 연산자는 산술, 비교, 논리, 대입 등 다양한 유형으로 분류되며, 복잡한 데이터 조작과 논리를 구현하는 데 필수적입니다. 이 가이드에서는 PHP에서 사용되는 다양한 연산자의 종류와 사용법을 상세히 설명하고, 실용적인 예제들을 통해 각 연산자의 기능을 명확하게 이해할 수 있도록 도와드리겠습니다.
1. PHP 연산자의 종류
PHP 연산자는 크게 다음과 같은 유형으로 분류됩니다:
- 산술 연산자 (Arithmetic Operators)
- 대입 연산자 (Assignment Operators)
- 비교 연산자 (Comparison Operators)
- 논리 연산자 (Logical Operators)
- 증감 연산자 (Increment/Decrement Operators)
- 비트 연산자 (Bitwise Operators)
- 문자열 연산자 (String Operators)
- 배열 연산자 (Array Operators)
- 조건부 연산자 (Conditional Operators)
- 실행 연산자 (Execution Operators)
- 오류 제어 연산자 (Error Control Operators)
각 연산자의 상세 내용과 사용법을 아래에서 살펴보겠습니다.
2. 산술 연산자 (Arithmetic Operators)
산술 연산자는 숫자 간의 기본적인 수학 연산을 수행합니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
+ |
덧셈 | 5 + 3 |
8 |
- |
뺄셈 | 5 - 3 |
2 |
* |
곱셈 | 5 * 3 |
15 |
/ |
나눗셈 | 5 / 3 |
1.666... |
% |
나머지 | 5 % 3 |
2 |
** |
거듭제곱 | 2 ** 3 |
8 |
예제: 산술 연산자 사용
<?php
$a = 10;
$b = 3;
echo $a + $b; // 출력: 13
echo "<br>";
echo $a - $b; // 출력: 7
echo "<br>";
echo $a * $b; // 출력: 30
echo "<br>";
echo $a / $b; // 출력: 3.3333333333333
echo "<br>";
echo $a % $b; // 출력: 1
echo "<br>";
echo $a ** $b; // 출력: 1000
?>
3. 대입 연산자 (Assignment Operators)
대입 연산자는 변수에 값을 할당할 때 사용됩니다. 기본 대입 연산자 외에도 복합 대입 연산자가 있습니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
= |
대입 | $a = 5; |
$a 는 5 |
+= |
더한 후 대입 | $a += 3; |
$a 는 이전 값 + 3 |
-= |
뺀 후 대입 | $a -= 2; |
$a 는 이전 값 - 2 |
*= |
곱한 후 대입 | $a *= 4; |
$a 는 이전 값 * 4 |
/= |
나눈 후 대입 | $a /= 2; |
$a 는 이전 값 / 2 |
%= |
나머지 후 대입 | $a %= 3; |
$a 는 이전 값 % 3 |
**= |
거듭제곱 후 대입 | $a **= 2; |
$a 는 이전 값 ** 2 |
예제: 대입 연산자 사용
<?php
$a = 10;
$a += 5; // $a는 15
echo $a; // 출력: 15
echo "<br>";
$a -= 3; // $a는 12
echo $a; // 출력: 12
echo "<br>";
$a *= 2; // $a는 24
echo $a; // 출력: 24
echo "<br>";
$a /= 4; // $a는 6
echo $a; // 출력: 6
echo "<br>";
$a %= 5; // $a는 1
echo $a; // 출력: 1
echo "<br>";
$a **= 3; // $a는 1
echo $a; // 출력: 1
?>
4. 비교 연산자 (Comparison Operators)
비교 연산자는 두 값을 비교하여 참(true
) 또는 거짓(false
)을 반환합니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
== |
값이 같은지 비교 | 5 == '5' |
true |
=== |
값과 타입이 같은지 비교 | 5 === '5' |
false |
!= |
값이 다른지 비교 | 5 != 3 |
true |
<> |
값이 다른지 비교 | 5 <> 3 |
true |
!== |
값 또는 타입이 다른지 비교 | 5 !== '5' |
true |
< |
작음 비교 | 3 < 5 |
true |
> |
큼 비교 | 5 > 3 |
true |
<= |
작거나 같음 비교 | 3 <= 5 |
true |
>= |
크거나 같음 비교 | 5 >= 3 |
true |
예제: 비교 연산자 사용
<?php
$a = 5;
$b = '5';
$c = 3;
var_dump($a == $b); // 출력: bool(true)
var_dump($a === $b); // 출력: bool(false)
var_dump($a != $c); // 출력: bool(true)
var_dump($a < $c); // 출력: bool(false)
var_dump($a > $c); // 출력: bool(true)
var_dump($a <= $b); // 출력: bool(true)
var_dump($a >= $b); // 출력: bool(true)
?>
5. 논리 연산자 (Logical Operators)
논리 연산자는 여러 조건을 결합하여 복잡한 논리를 구현할 때 사용됩니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
&& |
논리 AND | $a && $b |
둘 다 true 일 때 true |
` | ` | 논리 OR | |
and |
논리 AND | $a and $b |
&& 와 유사하지만 우선순위가 낮음 |
or |
논리 OR | $a or $b |
` |
! |
논리 NOT | !$a |
true 을 false 로, false 를 true 로 |
xor |
논리 XOR | $a xor $b |
둘 중 하나만 true 일 때 true |
예제: 논리 연산자 사용
<?php
$a = true;
$b = false;
// 논리 AND
var_dump($a && $b); // 출력: bool(false)
// 논리 OR
var_dump($a || $b); // 출력: bool(true)
// 논리 NOT
var_dump(!$a); // 출력: bool(false)
var_dump(!$b); // 출력: bool(true)
// 논리 XOR
var_dump($a xor $b); // 출력: bool(true)
// 'and'와 'or'의 우선순위 차이
$c = true;
$d = false;
$result1 = $c and $d; // ($result1 = $c) and $d
var_dump($result1); // 출력: bool(true)
$result2 = $c && $d; // $result2 = ($c && $d)
var_dump($result2); // 출력: bool(false)
?>
참고: and
와 or
은 &&
와 ||
보다 낮은 우선순위를 가지므로, 복잡한
표현식에서는 주의가 필요합니다.
6. 증감 연산자 (Increment/Decrement Operators)
증감 연산자는 변수의 값을 증가시키거나 감소시킵니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
++$a |
전위 증가 | ++$a |
$a 를 먼저 증가시키고 반환 |
$a++ |
후위 증가 | $a++ |
현재 값을 반환하고 나중에 증가 |
--$a |
전위 감소 | --$a |
$a 를 먼저 감소시키고 반환 |
$a-- |
후위 감소 | $a-- |
현재 값을 반환하고 나중에 감소 |
예제: 증감 연산자 사용
<?php
$a = 5;
// 전위 증가
echo ++$a; // 출력: 6
echo "<br>";
// 후위 증가
echo $a++; // 출력: 6
echo "<br>";
// 현재 값 확인
echo $a; // 출력: 7
echo "<br>";
// 전위 감소
echo --$a; // 출력: 6
echo "<br>";
// 후위 감소
echo $a--; // 출력: 6
echo "<br>";
// 현재 값 확인
echo $a; // 출력: 5
?>
7. 비트 연산자 (Bitwise Operators)
비트 연산자는 이진수 비트 단위로 연산을 수행합니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
& |
비트 AND | 5 & 3 |
1 |
` | ` | 비트 OR | `5 |
^ |
비트 XOR | 5 ^ 3 |
6 |
~ |
비트 NOT | ~5 |
-6 |
<< |
비트 시프트 왼쪽 | 5 << 1 |
10 |
>> |
비트 시프트 오른쪽 | 5 >> 1 |
2 |
예제: 비트 연산자 사용
<?php
$a = 5; // 이진수: 0101
$b = 3; // 이진수: 0011
echo $a & $b; // 출력: 1 (0001)
echo "<br>";
echo $a | $b; // 출력: 7 (0111)
echo "<br>";
echo $a ^ $b; // 출력: 6 (0110)
echo "<br>";
echo ~$a; // 출력: -6 (비트 NOT)
echo "<br>";
echo $a << 1; // 출력: 10 (1010)
echo "<br>";
echo $a >> 1; // 출력: 2 (0010)
?>
8. 문자열 연산자 (String Operators)
문자열 연산자는 문자열을 결합하거나 처리하는 데 사용됩니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
. |
문자열 결합 | $a . $b |
$a 와 $b 를 결합 |
.= |
문자열 결합 후 대입 | $a .= $b |
$a 에 $b 를 결합하여 다시 $a 에 대입 |
예제: 문자열 연산자 사용
<?php
$a = "Hello";
$b = "World";
// 문자열 결합
echo $a . " " . $b; // 출력: Hello World
echo "<br>";
// 문자열 결합 후 대입
$a .= " PHP";
echo $a; // 출력: Hello PHP
?>
9. 배열 연산자 (Array Operators)
배열 연산자는 두 배열을 비교하거나 결합할 때 사용됩니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
+ |
배열 합병 | $a + $b |
$a 에 없는 키만 $b 에서 추가 |
== |
두 배열이 동일한지 비교 | $a == $b |
키와 값이 동일하면 true |
=== |
두 배열이 동일한지 비교 | $a === $b |
키, 값, 순서까지 모두 동일하면 true |
!= |
두 배열이 다른지 비교 | $a != $b |
동일하지 않으면 true |
<> |
두 배열이 다른지 비교 | $a <> $b |
동일하지 않으면 true |
!== |
두 배열이 다른지 비교 | $a !== $b |
키, 값, 순서 중 하나라도 다르면 true |
예제: 배열 연산자 사용
<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "apple", "c" => "cherry");
// 배열 합병
$c = $a + $b;
print_r($c);
// 출력:
// Array
// (
// [a] => apple
// [b] => banana
// [c] => cherry
// )
// 배열 비교
var_dump($a == $b); // 출력: bool(false)
var_dump($a === $b); // 출력: bool(false)
?>
참고: 배열 합병 연산자 +
는 첫 번째 배열에 존재하지 않는 키만 두 번째 배열에서 추가합니다. 키가 동일한 경우 첫 번째 배열의 값이 유지됩니다.
10. 조건부 연산자 (Conditional Operators)
조건부 연산자는 특정 조건에 따라 값을 선택할 때 사용됩니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
?: |
삼항 연산자 | $a ? $b : $c |
$a 가 true 면 $b , 아니면 $c |
?? |
널 병합 연산자 | $a ?? $b |
$a 가 설정되어 있으면 $a , 아니면 $b |
예제: 조건부 연산자 사용
<?php
$a = true;
$b = "Yes";
$c = "No";
// 삼항 연산자
echo $a ? $b : $c; // 출력: Yes
echo "<br>";
// 널 병합 연산자
$d = null;
echo $d ?? $c; // 출력: No
$e = "Hello";
echo $e ?? $c; // 출력: Hello
?>
참고: 널 병합 연산자 ??
는 PHP 7.0 이상에서 사용할 수 있으며, 변수가 null
이거나 설정되지 않았을 때 대체 값을 지정할
때 유용합니다.
11. 실행 연산자 (Execution Operators)
실행 연산자는 외부 명령을 실행하고 결과를 반환합니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
``` | 셸 명령 실행 | ls -l |
셸 명령의 출력 결과 |
예제: 실행 연산자 사용
<?php
// 현재 디렉토리의 파일 목록을 출력
$output = `ls -l`;
echo "<pre>$output</pre>";
?>
주의: 실행 연산자는 보안상 위험할 수 있으므로, 신뢰할 수 없는 입력에 대해 절대 사용하지 않아야 합니다.
12. 오류 제어 연산자 (Error Control Operators)
오류 제어 연산자는 특정 표현식의 오류 메시지를 억제할 때 사용됩니다.
연산자 | 의미 | 예제 | 결과 |
---|---|---|---|
@ |
오류 억제 | @file_get_contents("nonexistent.txt") |
오류 메시지 없이 false 반환 |
예제: 오류 제어 연산자 사용
<?php
// 파일이 존재하지 않으면 경고 메시지 없이 false 반환
$content = @file_get_contents("nonexistent.txt");
if ($content === false) {
echo "파일을 불러올 수 없습니다.";
} else {
echo $content;
}
?>
주의: 오류 제어 연산자 @
는 디버깅을 어렵게 만들 수 있으므로, 필요할 때만 신중하게 사용해야 합니다.
13. 연산자 우선순위 및 결합 방향
연산자 우선순위는 표현식 내에서 연산자가 평가되는 순서를 결정합니다. 결합 방향은 같은 우선순위를 가진 연산자가 여러 개 있을 때 평가되는 방향을 나타냅니다.
연산자 우선순위 표
PHP의 연산자 우선순위는 복잡할 수 있으므로, 주요 연산자의 우선순위를 요약하면 다음과 같습니다. 자세한 내용은 PHP 공식 문서를 참고하세요.
- 참조 연산자 (
clone
,new
) - 후위 증감 연산자 (
expr++
,expr--
) - 전위 증감 연산자 (
++expr
,-expr
) - 산술 연산자 (
*
,, `/`, `%`, `+`,
) - 비트 시프트 연산자 (
<<
,>>
) - 비교 연산자 (
<
,>
,<=
,>=
,==
,===
,!=
,<>
,!==
) - 비트 연산자 (
&
,|
,^
,~
) - 논리 연산자 (
&&
,||
,and
,or
,xor
) - 대입 연산자 (
=
,+=
,=
,=
,/=
,%=
,*=
,.=
) - 조건부 연산자 (
?:
,??
) - 실행 연산자 (```)
- 오류 제어 연산자 (
@
)
예제: 연산자 우선순위 이해
<?php
$a = false || true; // 논리 OR, $a는 true
$b = false or true; // 논리 OR, $b는 false
var_dump($a); // 출력: bool(true)
var_dump($b); // 출력: bool(false)
$c = true && false; // 논리 AND, $c는 false
$d = true and false; // 논리 AND, $d는 true
var_dump($c); // 출력: bool(false)
var_dump($d); // 출력: bool(true)
?>
설명:
||
와&&
는or
과and
보다 우선순위가 높습니다.$a = false || true;
는$a = (false || true);
로 평가되어$a
는true
입니다.$b = false or true;
는($b = false) or true;
로 평가되어$b
는false
입니다.$c = true && false;
는$c = (true && false);
로 평가되어$c
는false
입니다.$d = true and false;
는($d = true) and false;
로 평가되어$d
는true
입니다.
14. PHP 연산자 활용 예제
PHP 연산자를 활용한 다양한 예제를 통해 실제 사용법을 익혀보겠습니다.
14.1 간단한 계산기 만들기
사용자로부터 두 숫자와 연산자를 입력받아 계산 결과를 출력하는 예제입니다.
HTML 폼: calculator.html
<!DOCTYPE html>
<html>
<head>
<title>PHP 계산기</title>
</head>
<body>
<h2>간단한 계산기</h2>
<form method="post" action="calculator.php">
첫 번째 숫자: <input type="text" name="num1"><br><br>
연산자:
<select name="operator">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
<option value="%">%</option>
</select><br><br>
두 번째 숫자: <input type="text" name="num2"><br><br>
<input type="submit" value="계산">
</form>
</body>
</html>
PHP 처리 스크립트: calculator.php
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 사용자 입력 받기
$num1 = floatval($_POST['num1']);
$num2 = floatval($_POST['num2']);
$operator = $_POST['operator'];
$result = 0;
// 연산자에 따른 계산 수행
switch ($operator) {
case "+":
$result = $num1 + $num2;
break;
case "-":
$result = $num1 - $num2;
break;
case "*":
$result = $num1 * $num2;
break;
case "/":
if ($num2 != 0) {
$result = $num1 / $num2;
} else {
echo "0으로 나눌 수 없습니다.";
exit;
}
break;
case "%":
$result = $num1 % $num2;
break;
default:
echo "유효하지 않은 연산자입니다.";
exit;
}
// 결과 출력
echo "결과: $result";
}
?>
사용 예시:
첫 번째 숫자: 10
연산자: +
두 번째 숫자: 5
결과: 15
14.2 사용자 로그인 검증
사용자의 입력을 검증하여 로그인 성공 여부를 판단하는 예제입니다.
HTML 폼: login.html
<!DOCTYPE html>
<html>
<head>
<title>PHP 로그인</title>
</head>
<body>
<h2>로그인</h2>
<form method="post" action="login.php">
사용자명: <input type="text" name="username"><br><br>
비밀번호: <input type="password" name="password"><br><br>
<input type="submit" value="로그인">
</form>
</body>
</html>
PHP 처리 스크립트: login.php
<?php
// 하드코딩된 사용자 데이터 (실제 환경에서는 데이터베이스 사용 권장)
define("VALID_USERNAME", "admin");
define("VALID_PASSWORD", "password123");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
// 비교 연산자와 논리 연산자 사용
if ($username === VALID_USERNAME && $password === VALID_PASSWORD) {
echo "로그인 성공!";
} else {
echo "로그인 실패: 사용자명 또는 비밀번호가 올바르지 않습니다.";
}
}
?>
사용 예시:
사용자명: admin
비밀번호: password123
로그인 성공!
14.3 비트 연산을 활용한 권한 설정
비트 연산자를 사용하여 사용자 권한을 설정하고 확인하는 예제입니다.
<?php
// 권한 상수 정의 (비트 플래그)
define("READ", 1); // 0001
define("WRITE", 2); // 0010
define("EXECUTE", 4); // 0100
// 사용자 권한 설정 (읽기 및 실행 권한)
$userPermissions = READ | EXECUTE; // 0001 | 0100 = 0101 (5)
// 권한 확인 함수
function hasPermission($permissions, $flag) {
return ($permissions & $flag) === $flag;
}
// 권한 확인
echo hasPermission($userPermissions, READ) ? "읽기 권한 있음<br>" : "읽기 권한 없음<br>";
echo hasPermission($userPermissions, WRITE) ? "쓰기 권한 있음<br>" : "쓰기 권한 없음<br>";
echo hasPermission($userPermissions, EXECUTE) ? "실행 권한 있음<br>" : "실행 권한 없음<br>";
?>
출력 예시:
읽기 권한 있음
쓰기 권한 없음
실행 권한 있음
15. PHP 연산자 우선순위와 결합 방향
연산자의 우선순위와 결합 방향을 이해하면 복잡한 표현식을 정확하게 해석하고 작성할 수 있습니다.
연산자 우선순위 예제
<?php
$a = true || false; // 논리 OR
$b = true or false; // 논리 OR
var_dump($a); // 출력: bool(true)
var_dump($b); // 출력: bool(true)
$c = false && true; // 논리 AND
$d = false and true; // 논리 AND
var_dump($c); // 출력: bool(false)
var_dump($d); // 출력: bool(false)
?>
설명:
||
과&&
는or
과and
보다 우선순위가 높습니다.- 따라서
$a = true || false;
는$a = (true || false);
로 평가되어$a
는true
입니다. - 반면,
$b = true or false;
는($b = true) or false;
로 평가되어$b
는true
입니다. - 유사하게,
$c = false && true;
는($c = (false && true));
로 평가되어$c
는false
입니다. $d = false and true;
는($d = false) and true;
로 평가되어$d
는false
입니다.
주의: 연산자 우선순위를 정확히 이해하고 필요에 따라 괄호를 사용하여 의도한 대로 표현식을 작성해야 합니다.
16. PHP 연산자 Best Practices
PHP 연산자를 효과적으로 사용하기 위한 몇 가지 권장 사항을 소개합니다.
16.1 명확한 연산자 사용
복잡한 표현식을 작성할 때는 괄호를 사용하여 연산자의 우선순위를 명확히 하고, 코드의 가독성을 높입니다.
<?php
// 불명확한 표현식
$result = $a + $b * $c;
// 명확한 표현식
$result = $a + ($b * $c);
?>
16.2 복합 대입 연산자 활용
복합 대입 연산자를 사용하여 코드의 간결성과 효율성을 높일 수 있습니다.
<?php
// 일반 대입 연산자
$a = $a + 10;
// 복합 대입 연산자
$a += 10;
?>
16.3 삼항 연산자와 널 병합 연산자 사용
간단한 조건문을 표현할 때 삼항 연산자나 널 병합 연산자를 활용하면 코드가 더 간결해집니다.
<?php
// 삼항 연산자
$status = ($age >= 18) ? "성인" : "미성년자";
// 널 병합 연산자
$username = $_GET['user'] ?? '기본 사용자';
?>
16.4 비트 연산자의 안전한 사용
비트 연산자는 권한 설정이나 플래그 관리에 유용하지만, 복잡한 비트 연산을 수행할 때는 주의가 필요합니다. 가독성을 높이기 위해 상수를 정의하고, 명확한 주석을 추가하는 것이 좋습니다.
<?php
define("READ", 1); // 0001
define("WRITE", 2); // 0010
define("EXECUTE", 4); // 0100
$permissions = READ | EXECUTE;
// 권한 확인
if (($permissions & WRITE) === WRITE) {
echo "쓰기 권한 있음";
} else {
echo "쓰기 권한 없음";
}
?>
17. 요약
PHP 연산자는 변수와 값에 대한 다양한 연산을 수행하는 강력한 도구입니다. 산술, 대입, 비교, 논리, 비트, 문자열, 배열, 조건부 등 다양한 유형의 연산자가 제공되며, 이를 통해 복잡한 데이터 처리와 논리를 효율적으로 구현할 수 있습니다.
- 산술 연산자는 기본적인 수학 연산을 수행합니다.
- 대입 연산자는 변수에 값을 할당하거나 복합적인 연산 후 대입을 수행합니다.
- 비교 연산자는 두 값을 비교하여 참 또는 거짓을 반환합니다.
- 논리 연산자는 여러 조건을 결합하여 복잡한 논리를 구현합니다.
- 증감 연산자는 변수의 값을 증가시키거나 감소시킵니다.
- 비트 연산자는 이진수 비트 단위의 연산을 수행합니다.
- 문자열 연산자는 문자열을 결합하거나 처리합니다.
- 배열 연산자는 배열을 비교하거나 합병합니다.
- 조건부 연산자는 특정 조건에 따라 값을 선택합니다.
- 실행 연산자는 외부 명령을 실행합니다.
- 오류 제어 연산자는 특정 표현식의 오류 메시지를 억제합니다.
연산자 우선순위와 결합 방향을 이해하면, 복잡한 표현식을 정확하게 작성하고 해석할 수 있으며, 이를 통해 더욱 효율적이고 오류 없는 코드를 작성할 수 있습니다. PHP 연산자의 다양한 기능을 잘 활용하여 웹 애플리케이션 개발에서 필요한 데이터 처리와 논리를 효과적으로 구현해보세요.
18. 추가 자료 및 참고 링크
이 가이드를 통해 PHP 연산자의 다양한 종류와 사용법을 이해하고, 실용적인 예제를 통해 이를 실제 코드에 적용하는 방법을 익히셨기를 바랍니다. PHP 연산자를 효과적으로 활용하여 더욱 강력하고 유연한 웹 애플리케이션을 개발해보세요.