TIL PHP 3/29/2023

엽토군·2023년 3월 29일
0

TIL

목록 보기
7/13

문제

$shard = 79;
$shardCount = 11;
echo 'oceans_'.$shard % $shardCount;

위 코드는 어떤 문제를 일으킬까?

  1. 무한 루프가 발생하여 segmentation fault가 발생한다.
  2. E_WARNING 경고가 발생한다.
  3. PHPStorm Inspection 등의 정적 분석 도구가 수정을 권고한다.
  4. 아무 문제도 일으키지 않는다.

정답은 4번이다. 아무 문제도 일어나지 않는다. 위 PHP 스크립트는 조용히 oceans_2를 출력하고 종료된다.

해설

제아무리 똑똑하게 멍청한 PHP라지만 아무리 그래도 'oceans_' . $shard$shardCount에 대해 모듈러 연산하는 일은 없다. 이건 왜 그러냐면 연산자 우선순위 때문인데, 표를 보면, %.보다 아주 약간 더 높은 연산 우위에 있다.

순위연산자 위치연산자비고
6왼쪽*, /, %산술 연산
7왼쪽+, -, .PHP 8.0 이전까지는 .이 이 우위에 속함
생략 ...
9왼쪽.문자열 연산 (PHP 8.0부터)

그래서, 마치 3 + 7 * 87*8을 먼저 연산하듯, '3' . 7 % 8 역시 7 % 8을 먼저 연산한다. 괄호가 필요 없는 것은 이 덕분이다.

교훈

뭐든 찾아보고 볼 일이다.

profile
5년차 PHP 개발자입니다.

0개의 댓글