$x1 = 16 + 4 + 'V4olvo';
$x1 ще е int(20), защото в PHP, за разлика от JS, плюсът е само аритметичен оператор. Започва от ляво на дясно, събира първите две, после вижда, че трябва да добави и стринг. Ако този стринг поне ЗАПОЧВА с число – ще вземе само това число, иначе ще смята тоз стринг за 0, дори и вътре в стринга да има числа.
Затова например това:
$x2 = 16 + 4 + '4Volvo'; // x2 ще е int(24), демек все едно 16 $x3 = 'Volvo' + 16 + 4; // x3 ще е int(20), демек все едно 0 + 16 + 4
//var_dump(16 . 4);die; // string(3) „164“ явно операторът (конкатениране) предварително ги каства към стрингове
//var_dump(’16’ + ‘4’);die; // int(20) явно операторът (събиране) предварително ги каства към числа
Цялата работа е следната: то (PHP-то), започва от ляво на дясно, гледа оператора, и се опитва да кастне към число или стринг.
Демек, вижда ЕДНОНЕЩО + ДРУГОНЕЩО и разсъждава така: „Имам плюс, демек аритметичен оператор, значи трябва да събирам числа. Но това не са числа. Ми дай да опитам да ги направя числа.“ И до колкото успее – успее.
Аналогично – и при точката (конкатенацията), подавай му каквито щеш операнди, то като види, че трябва да конкатенира – първо ще опита да ги кастне към стрингове.
Затова се казва, че в PHP операторът „коли и беси“
$x4 = 16 + 4 . ‘Volvo’; // x4 ще е string „20Volvo“ – явно както в JS, ги започва от ляво надясно, и понеже първо има събиране – каства операндите към числов тип (то в сличая няма нужда де, но все пак), после вижда „я! конкатениране, айде всичко до тука – стринг, и тогава конкатенира“. И така и останалите, ако има такива.
$x5 = ‘Volvo’ . 16 + 4; // x5 ще е int 4 – явно първо конкатенира Volvo с 16, което прави ‘Volvo16’, и после се опитва да събира с 4, но понеже Volvo16 не започва с цифра, става на 0 и тогава събира с 4
$cc = 100 + '100'; var_dump($cc); // int(200) $mc = '100' + 100; var_dump($mc); // int(200) $fc = 100 + 100; var_dump($fc); // int(200)