Сюрпризы PHP

Коллекция различных сюрпризов из PHP5.6 и PHP7. Убедиться можно тут: PHP онлайн

Функция с одноименными аргументами

function foo($a, $a) {
  var_dump(func_get_args());
  return $a;
}
 
echo foo('1', '2');

PHP 5.6 выдаст такой результат:

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
}
2

PHP 7 - фатальную ошибку:

PHP Fatal error:  Redefinition of parameter $a in /home/jdoodle.php on line 3

Инкремент

Чему равно выражение?

$i = 0;
$i = $i++ + $i++;
var_dump($i);

Ответ: 1

Float

true или false?

$s = 160.98; $s *= 100; var_dump((int)$s === 16098);

Ответ: false

Приведение типов

true или false?

var_dump(!-1);
var_dump(!"");

Ответ: false; true

serialize и unserialize модификаторов свойств объекта

Что будет, если в момент serialize свойство было private, а в момент unserialize стало protected?

PHP 5.6: protected свойство НЕ устанавливается верным образом после unserialize.

PHP 7.3: protected свойство устанавливается верно, тем же значением, что и было.

Расширенный ответ

Ссылки

Печать/экспорт