Автор PHPUnit. Представляем PHP 7.0 7.1, PHPUnit 5 и 6.
- PHPUnit 4.8 не поддерживает PHP 7
- PHPUnit 4 -> 5 для PHP 5.6 до PHP 7.1
Основные изменения PHP 7
- Рефакторинг
- Очистка
- Представление
- Система типов
- Исполнитель: быстрый, использует меньше памяти, использует на 30% меньше процессора, чем PHP 5.6.
- Компилятор: генерирует лучший байт-код
- Парсер: теперь основан на абстрактном синтаксическом дереве (AST)
- Лексер: контекстно-зависимый
不要用看起來很但是很難理解的語法,看了十秒還是看不懂那就把它刪掉
PHP 7: фатальных ошибок нет!? В PHPUnit ошибка в одном тесте, он перейдет к следующему тесту.
Подсказка типа
function test(string $a, int $b, float $c) { var_dump($a, $b, $c); }
строгий режим:
declare(strict_types=1);
объявления типов возврата
function test() : int { return 1; }
оператор КОСМИЧЕСКОГО КОРАБЛЯ
// in PHP 7 return $a <=> $b; // in PHP 5.6 it means return ($a < $b) ? -1 : ( ($a > $b) ? 1 : 0);
PHPUnit
(5.2)
исключения тестирования
4.8 是( 只能 ?) 用 @Annotations
$this->expectException(ExpectedException::class);
(5.3)
новые предупреждения для mock
(5.4)
PHPUnit\Framework\TestCase // alias for PHPUnit_Framework_TestCase
CREATEMOCK()
$foo = $this->createMock(Foo::class); $foo = $this->createPartialMock(Foo::class); // getMock() is deprecate
PHP 7.1
- void возвращаемый тип
function test() : void { return 'foo'; } // fatal error
- типы, допускающие значение null
function test(?int $x) // 可能 null 不然得是 int
- повторяемый супертип
function test(iterable $element) { }
- перехват нескольких типов исключений
try {} catch (xxException | ooException) { }
- постоянная видимость класса
class { public const A = 0; }
асинхронная обработка сигналов
https://wiki.php.net/rfc/async_signals
В настоящее время php может обрабатывать сигналы ОС, используя расширения
pcntl
:
синхронно, вызывая
pcntl_signal_dispatch()
вручную
асинхронно, компилируя скрипты с
declare(ticks=1)
pcntl_async_signals(1);
Версии PHPUnit 5.6
PHP 7, версия PHPUnit 5.7