Deprecation Notices & Migration Strategy
TL;DR
E_DEPRECATED warnings signal features removed in the next PHP major version — treating them as errors in CI prevents upgrade blockers from accumulating.
Explanation
PHP uses E_DEPRECATED to warn that a function, parameter, or behaviour will be removed in a future version. E_USER_DEPRECATED is the user-land equivalent. In PHP 8.x, many PHP 7.x patterns trigger deprecations (dynamic properties, ${} string interpolation, implicitly nullable parameters). Best practice: set error_reporting(E_ALL) in dev to surface them, use PHPStan/Psalm to catch them statically, and use Rector to auto-fix them. Run php -d error_reporting=32767 in CI to catch all notices. Never suppress deprecations with @.
Common Misconception
✗ Deprecation notices are just warnings — they can be safely ignored until the next major version. Ignoring them creates a wall of breaking changes at upgrade time.
Why It Matters
Deprecations compound — each ignored notice becomes a potential breaking change at the next major release, making upgrades exponentially harder.
Common Mistakes
- Suppressing deprecations with @ operator or error_reporting(~E_DEPRECATED).
- Not running Rector to auto-fix deprecations before upgrades.
- Upgrading PHP major versions without first eliminating all deprecations on the previous version.
Code Examples
✗ Vulnerable
// PHP 8.2: Dynamic properties deprecated
class User {
// No typed properties defined
}
$u = new User();
$u->name = 'Paul'; // Deprecated: Creation of dynamic property
✓ Fixed
// Fix: declare the property explicitly
class User {
public string $name = '';
}
// Or add attribute to acknowledge intentional dynamic properties (PHP 8.2+):
#[\AllowDynamicProperties]
class LegacyUser {}
Tags
🤝 Adopt this term
£79/year · your link shown here
Added
22 Mar 2026
Views
34
🤖 AI Guestbook educational data only
|
|
Last 30 days
Agents 0
No pings yet today
No pings yesterday
Amazonbot 8
Google 6
Perplexity 6
Unknown AI 4
SEMrush 3
ChatGPT 1
Ahrefs 1
Also referenced
How they use it
crawler 28
pre-tracking 1
Related categories
⚡
DEV INTEL
Tools & Severity
🟡 Medium
⚙ Fix effort: Low
⚡ Quick Fix
Run error_reporting(E_ALL) in dev, use Rector to auto-fix deprecations, and ensure CI fails on E_DEPRECATED. Fix all deprecations before upgrading PHP major versions.
📦 Applies To
PHP 5.0+
web
cli
🔗 Prerequisites
🔍 Detection Hints
E_DEPRECATED
Auto-detectable:
✓ Yes
rector
phpstan
psalm
⚠ Related Problems
🤖 AI Agent
Confidence: High
False Positives: Low
✓ Auto-fixable
Fix: Low
Context: File
Tests: Update