Как трюк XOR для замены двух переменных действительно работает на строке?

Я просто просмотрел этот фрагмент кода для замены значений двух переменных в PHP:

<?php $a = 'bar'; $b = 'foo'; $a = $a ^ $b; $b = $a ^ $b; $a = $a ^ $b; echo $a . $b; 

Я понимаю концепцию в двоичном коде; всегда ли это работает на струнах? Как?

PHP применяет побитовые операторы к строкам, применяя их к каждому символу в отдельности.

PHP: Побитовые операторы :

Помните о преобразованиях типов данных. Если оба параметра слева и справа являются строками, побитовый оператор будет работать с значениями символов ASCII.

Это будет работать, если обе строки имеют одинаковое количество символов или, точнее, то же количество байтов. Если приведенная выше цитата действительно точная, то она может работать только для строк ASCII.