PHP 7.2 (30.11.2017)

Object type chint

🔷 object type hint

Зачем: принимать любой объект, но не скаляры/массивы.
Пример

				
					function persist(object $entity): void {
    // $entity может быть User, Order — но не [], не 'string'
}
persist(new User()); // ✅  
persist([]);         // ❌ TypeError
				
			

Запрет на override констант

🚫 Запрет на override констант в наследниках
Было (PHP 7.1):

				
					class A { const C = 1; }
class B extends A { const C = 2; } // работало
				
			

Стало (PHP 7.2):
→ Fatal error: Cannot override previously defined const.
Решение: используй static::C + late static binding.

Улучшенная обработка ошибок

🧪 Улучшенная обработка ошибок

  • count(null) → Warning (раньше — 0, тихо),
  • 'string'[100] → Warning (раньше — "", тихо),
  • foreach([] as $k => $v) с не-перебираемым → TypeError.
 

→ Выявляет скрытые баги.

 

Прочее

— Перегрузка абстрактных функций

— Объявлена устаревшей __autoload()

— Удалён mcrypt

— Добавлена возможность расширить тип аргумента в наследнике (Контравариантность):

class ArrayClass { public function foo(array $foo) {/* … */} } class EverythingClass extends ArrayClass { public function foo($foo) {/* … */} }