The codebase had it in about 60% of files, which is the worst of the three possible states because nobody can tell which behaviour applies where.
// without it, at the call site
function age(int $years): string { /* ... */ }
age('40'); // fine. coerced to 40.
age('40 years'); // TypeError, but only since 8.0
// with it
age('40'); // TypeError
// the rollout, which is not a one-line change
$ find src -name '*.php' ! -exec grep -lq strict_types {} ; -print | wc -l
412
$ vendor/bin/rector process src --config=rector-strict.php
$ vendor/bin/phpunit
Tests: 1,412, Failures: 7
The seven failures were the point of the exercise: five were tests passing numeric strings from a fixture, and two were production code passing a value straight from a query result, where MySQL returns integers as strings over the text protocol. That second category is the one that makes this worth doing — it is a type error that had been silently coerced for years and would have surfaced eventually as a comparison that behaved oddly.