산술연산자
사칙 연산을 다루는 가장 기본적이면서도 많이 사용하는 연산자.
산술 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽입니다.
$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
대입연산자
변수에 값을 대입할 때 사용하는 이항 연산자.
피연산자들의 결합 방향은 오른쪽에서 왼쪽입니다.
- 복합대입연산자
모두 두 개의 피연산자를 가지는 이항 연산자
$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
증감연산자
피연산자를 1씩 증가 혹은 감소시킬 때 사용하는 연산자.
피연산자가 단 하나뿐인 단항 연산자.
해당 연산자가 피연산자의 어느 쪽에 위치하는가에 따라 연산의 순서 및 결과가 달라집니다.
$num_01 = 7;
$num_02 = 7;
echo "++\\$num_01 에 의한 결과는 ".(++$num_01 - 5)."이고, 변수의 값은 {$num_01}로 변했습니다.<br>";
echo "\\$num_02++ 에 의한 결과는 ".($num_02++ - 5)."이고, 변수의 값은 {$num_02}로 변했습니다.";
위의 예제에서 첫 번째 연산은 변수 $num_01의 값을 먼저 1 증가시킨 후에 전체 연산을 수행합니다.
하지만 두 번째 연산은 먼저 모든 연산을 끝마친 후에 변수 $num_02의 값을 1 증가시킵니다.
따라서 두 번째 연산에서 변수 $num_02의 증가는 전체 연산에 어떠한 영향도 미치지 않습니다.
$x = 10;
$y = $x-- + 5 + --$x;
echo "변수 \\$x 의 값은 ".$x."이고, 변수 \\$y 의 값은 ".$y."으로 변경되었습니다.";
비교연산자
피연산자 사이의 상대적인 크기를 판단하여, 참(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
- 다양한 타입의 비교
① 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
논리연산자
논리식을 판단하여, 참(true)과 거짓(false)을 반환.
and, or, xor 연산자는 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽입니다.
! 연산자는 피연산자가 단 하나뿐인 단항 연산자이며, 피연산자의 결합 방향은 오른쪽에서 왼쪽입니다.
$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
비트연산자
논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 수행.
비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용.
$num_01 = 15;
$num_02 = 8;
echo "~ 연산자에 의한 결괏값은 ".(~$num_01)."입니다.<br>"; // 1의 보수
① echo "<< 연산자에 의한 결괏값은 ".($num_02<<1)."입니다.<br>"; // 곱하기 2
② echo ">> 연산자에 의한 결괏값은 ".($num_02>>1)."입니다."; // 나누기 2
[ 상세한 설명 ] www.tcpschool.com/php/php_operator_bitwise
기타
삼항 연산자
유일하게 피연산자를 세 개나 가지는 조건 연산자.
조건식 ? 반환값1 : 반환값2
물음표(?) 앞의 표현식에 따라 결괏값이 참이면 반환값 1을 반환하고, 결괏값이 거짓이면 반환값 2를 반환합니다.
$num_01 = 15;
$num_02 = 8;
$result = ($num_01 > $num_02) ? $num_01 : $num_02;
echo "둘 중에 더 큰수는 {$result}입니다.";
- 문자열 연산자
문자열 연산자(.)를 사용하여 문자열을 연결.
echo() 함수에서는 쉼표 연산자(,)를 이용하여 문자열을 연결할 수 있습니다.
$str_01 = "PHP 수업";
$str_02 = "에 오신것을 환영합니다!";
echo "두 문자열을 합친 문자열은 '".($str_01.$str_02)."'입니다.<br>";
echo $str_01, $str_02;
- 배열 합집합 연산자
피연산자로 오는 두 배열의 합집합을 반환.
왼쪽 피연산자로 오는 배열의 키값은 유지하면서, 거기에 맞춰 오른쪽 피연산자로 오는 배열을 덧붙이는 방식
→ 같은 키에 대한 값에는 왼쪽 피연산자로 오는 배열의 값이 저장
# 연관 배열(같은 키)
$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 연산자
1. 해당 변수가 어떤 클래스(class)에서 생성된 객체(object)인지를 확인할 때
2. 해당 변수가 부모 클래스(parent class)에서 상속받은 클래스인지를 확인할 때
3. 해당 변수가 클래스의 인스턴스(instance)인지 아닌지를 확인할 때
4. 해당 변수가 인터페이스(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
※ 연산자의 우선순위
우선순위 연산자 설명 결합 방향 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 , 쉼표 연산자 왼쪽에서 오른쪽으로
[ 참조 ] www.tcpschool.com/php/intro
'스터디 > 백엔드' 카테고리의 다른 글
[PHP] 한글 NFD 정규화 : MAC 한글 깨짐(자소분리)현상 (0) | 2020.12.17 |
---|---|
우리의 만남 두번째.[PHP 함수종류 상수] (0) | 2020.11.12 |
[PHP] 코드영역 , 변수 (0) | 2020.11.11 |
첫 모임 설렘 가득한 우리의 토론의장 Start. (1) | 2020.11.09 |