$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
을 먼저 연산한다. 괄호가 필요 없는 것은 이 덕분이다.
뭐든 찾아보고 볼 일이다.