PHP 7.0 (03.12.2015)

Скалярные типы

Объявление:

				
					function sum(int $a, float $b, string $c, bool $d): float {
    return $a + $b;
}
				
			

Директива компилятора declare(strict_types=1)

→ По умолчанию weak mode: '5' → 5, true → 1.
→ Strict mode (файл целиком):

				
					declare(strict_types=1); // ДО всех импортов
				
			

⚠️ strict_types=1 работает только для вызовов из этого файла, не для вызываемых функций.

 

Оператор объединения с null

🛑 Null coalescing operator ??

				
					$username = isset($_GET['user']) ? $_GET['user'] : 'guest';
				
			

Стало:

				
					$username = $_GET['user'] ?? 'guest';
				
			

→ Проверяет isset(), а не !empty() → 0, '0', false — валидны.

 

Spaceship

⚖️ Spaceship operator <=>

Для сравнения (в usort, array_multisort):

  • 1<=>2; // -1
  • 1<=>1; // 0
  • 2<=>1; // 1
				
					usort($users, fn($a, $b) => $a['age'] <=> $b['age']);
// Возвращает -1, 0, 1 — как callback в usort
				
			

→ Работает со строками, числами, массивами.

Интерфейс Throwable -> Error, Exception -> ErrorException

🧨 Throwable, Error, Exception

  • Exception → для пользовательских ошибок,
  • Error (наследует Throwable) → для фатальных ошибок (например, call to undefined method),
  • Теперь catch (Throwable $e) ловит всё.
				
					try {
    callUndefined(); // Error
} catch (Throwable $e) { // ловит и Error, и Exception
    die('Упс');
}
				
			

🚫 Удалено:

  • mysql_* функции — полностью выпилены,
  • ereg_* — удалены (уже deprecated в 5.3),
  • $php_errormsg — заменён на error_get_last().
 

→ При апгрейде с 5.6 → 7.0 — обязательно прогоняй через php -l и статический анализ.