$shard = 79;
$shardCount = 11;
echo 'oceans_'.$shard % $shardCount;
위 코드는 어떤 문제를 일으킬까?
E_WARNING 경고가 발생한다.정답은 4번이다. 아무 문제도 일어나지 않는다. 위 PHP 스크립트는 조용히 oceans_2를 출력하고 종료된다.
제아무리 똑똑하게 멍청한 PHP라지만 아무리 그래도 'oceans_' . $shard를 $shardCount에 대해 모듈러 연산하는 일은 없다. 이건 왜 그러냐면 연산자 우선순위 때문인데, 표를 보면, %는 .보다 아주 약간 더 높은 연산 우위에 있다.
| 순위 | 연산자 위치 | 연산자 | 비고 |
|---|---|---|---|
| 6 | 왼쪽 | *, /, % | 산술 연산 |
| 7 | 왼쪽 | +, -, . | PHP 8.0 이전까지는 .이 이 우위에 속함 |
| 생략 ... | |||
| 9 | 왼쪽 | . | 문자열 연산 (PHP 8.0부터) |
그래서, 마치 3 + 7 * 8이 7*8을 먼저 연산하듯, '3' . 7 % 8 역시 7 % 8을 먼저 연산한다. 괄호가 필요 없는 것은 이 덕분이다.
뭐든 찾아보고 볼 일이다.