The rule reads backwards from how everyone assumes it works. declare(strict_types=1) governs the calls made from that file, not the calls made into the functions declared in it.
// Money.php — no declare
function fromCents(int $cents): Money { /* ... */ }
// Checkout.php — declare(strict_types=1)
fromCents('4900'); // TypeError, decided by Checkout.php
// Legacy.php — no declare
fromCents('4900'); // fine, coerced to 4900
So the same function is strict for one caller and lenient for another, in the same request. This is what makes an incremental rollout possible at all, and it is also why “we turned on strict types” is not a statement about a codebase until every file has it. Put it in the file template so new code gets it by default and the boundary only ever moves one way.