Про объективность использования C++ это вам уже и так понаписали. Давайте растолкую про не устраивающую вас логику PHP. Правда в другом порядке.
<?php $a = "2d9"; $a++; echo $a; → 2e0
a — строка. Инкремент строки (которая не является записью в 10чной СЧ) выполняется
по принципу Perl: «A»++ = «B», «Z»++ = «AA», «AA»++ = «AB». Вот и получаем «2e0».
<?php $a = "2d9"; $a++; $a++; echo $a; → 3
Если же строка содержит нечто, похожее на 10чную СЧ, то приводим к целому и инкрементируем. Второй инкремент дает «2e0» = 2*10^0 = 2. 2++ = 3.
<?php $a = "2d9"; $a+=2; echo $a; → 4
Арифметика без инкремента сразу приводит строку к числу, и мы просто считаем 2+2.
Нормальная логика, если учесть, как PHP используется. Это как удивляться, почему инкремент short* увеличивает значение указателя на 2, а не «как должно быть» на 1 :)