코딩 스쿨 PHP

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

PHP Operators

PHP 연산자(Operators): 종류와 사용법 완벽 가이드

PHP 연산자란 무엇인가요?

PHP 연산자는 변수와 값에 대한 연산을 수행하는 데 사용되는 기호나 단어입니다. 연산자는 산술, 비교, 논리, 대입 등 다양한 유형으로 분류되며, 복잡한 데이터 조작과 논리를 구현하는 데 필수적입니다. 이 가이드에서는 PHP에서 사용되는 다양한 연산자의 종류와 사용법을 상세히 설명하고, 실용적인 예제들을 통해 각 연산자의 기능을 명확하게 이해할 수 있도록 도와드리겠습니다.


1. PHP 연산자의 종류

PHP 연산자는 크게 다음과 같은 유형으로 분류됩니다:

  1. 산술 연산자 (Arithmetic Operators)
  2. 대입 연산자 (Assignment Operators)
  3. 비교 연산자 (Comparison Operators)
  4. 논리 연산자 (Logical Operators)
  5. 증감 연산자 (Increment/Decrement Operators)
  6. 비트 연산자 (Bitwise Operators)
  7. 문자열 연산자 (String Operators)
  8. 배열 연산자 (Array Operators)
  9. 조건부 연산자 (Conditional Operators)
  10. 실행 연산자 (Execution Operators)
  11. 오류 제어 연산자 (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; $a5
+= 더한 후 대입 $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 truefalse로, falsetrue
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)
?>

참고: andor&&||보다 낮은 우선순위를 가지므로, 복잡한 표현식에서는 주의가 필요합니다.


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 $atrue$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 공식 문서를 참고하세요.

  1. 참조 연산자 (clone, new)
  2. 후위 증감 연산자 (expr++, expr--)
  3. 전위 증감 연산자 (++expr, -expr)
  4. 산술 연산자 (*, , `/`, `%`, `+`, )
  5. 비트 시프트 연산자 (<<, >>)
  6. 비교 연산자 (<, >, <=, >=, ==, ===, !=, <>, !==)
  7. 비트 연산자 (&, |, ^, ~)
  8. 논리 연산자 (&&, ||, and, or, xor)
  9. 대입 연산자 (=, +=, =, =, /=, %=, *=, .=)
  10. 조건부 연산자 (?:, ??)
  11. 실행 연산자 (```)
  12. 오류 제어 연산자 (@)

예제: 연산자 우선순위 이해

<?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)
?>

설명:

  • ||&&orand보다 우선순위가 높습니다.
  • $a = false || true;$a = (false || true);로 평가되어 $atrue입니다.
  • $b = false or true;($b = false) or true;로 평가되어 $bfalse입니다.
  • $c = true && false;$c = (true && false);로 평가되어 $cfalse입니다.
  • $d = true and false;($d = true) and false;로 평가되어 $dtrue입니다.

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)
?>

설명:

  • ||&&orand보다 우선순위가 높습니다.
  • 따라서 $a = true || false;$a = (true || false);로 평가되어 $atrue입니다.
  • 반면, $b = true or false;($b = true) or false;로 평가되어 $btrue입니다.
  • 유사하게, $c = false && true;($c = (false && true));로 평가되어 $cfalse입니다.
  • $d = false and true;($d = false) and true;로 평가되어 $dfalse입니다.

주의: 연산자 우선순위를 정확히 이해하고 필요에 따라 괄호를 사용하여 의도한 대로 표현식을 작성해야 합니다.


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 연산자를 효과적으로 활용하여 더욱 강력하고 유연한 웹 애플리케이션을 개발해보세요.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com