Существует красивое и элегантное решение в одну строку:
list($a, $b) = [$b, $a];
А для PHP версий 5.3 и старше можно воспользоваться сокращённым вариантом:
[$a, $b] = [$b, $a];
Что более читаемо и проще, чем классическое:
$tmp = $a; $a = $b; $b = $tmp;
Кроме того, таким образом можно поменять местами значения более чем двух переменных за раз:
[$a, $b, $c] = [$c, $b, $a];
Существует ещё несколько классических решений, которые работают только с целочисленными переменными. Например, с помощью XOR:
$a = $a ^ $b; $b = $b ^ $a; $a = $a ^ $b;
Либо вариант со сложением и вычитанием:
$a = $a + $b; $b = $a - $b; $a = $a - $b;
В случае со сложением можно выйти за диапазон допустимых значений если значения переменных будут достаточно большими. XOR решает эту проблему, но необходимо понимать что это работает с int, а для string или каких-то других типов придётся использовать другой подход.
Как поменять местами значения переменных в других языках
Для Python и Ruby будет такое элегантное решение:
a, b = b, a
А для PHP и Java знатоки предлагают такой вариант:
a = a + b - (b = a);
Для прочих языков можно попробовать воспользоваться такими решениями:
a += b - (b = a)
a ^= b ^= a ^= b
a ^= b ^ (b = a)
Также существует бесконечная масса вариаций этих решений, где добавляются дополнительные операции и необоснованно решение усложняется.