PHP - Best Practices 2019
06 Dec 2019
I think it’s time for an fresh and simplified blog post about the latest PHP Best Practices in 2019 / 2020. A lot has changed within the last time I have written about this topic in 2018.
Principles and rules
Here are the most important rules:
- KISS - Keep it simple, stupid
- YAGNI - You Arent Gonna Need It
- DRY - Don’t repeat yourself
- SOLID - The First 5 Principles of Object Oriented Design
- The Boy Scout Rule - Leave your code better than you found it
- Code must follow PSR-1 and PSR-12. PSR-2 is deprecated.
- Add full PSR-5 DocBlocks for all classes and all methods.
- Use english names only (class names, method names, comments, variables names, database table and field names, etc…).
- Use class suffixes / prefixes according to PSR Naming Conventions.
- Follow industry best practices for your directory and file structure:
- All methods must have type declaration and return type declaration.
- Methods without return statement must declared with
voidas their return type.
- Class properties must have typed properties (PHP 7.4+).
- Don’t mix data types for parameters and return types, except for
extendclasses or create
abstractclasses for the sake of “code reuse”, except for traits with test code only.
finalclasses by default, except you have to mock it (e.g. repositories).
privatemethods by default. Don’t create
- All method parameters must be used.
- Use composition over inheritance.
- Declare all class dependencies only within the constructor.
- Don’t inject the container (PSR-11). The service locator is an anti-pattern.
- A constructor can accept only dependencies as object.
- Scalar data types (string, int, float, array) are not allowed for the constructor. Pass them as parameter object.
Use a static code analyzer to detect bugs and errors. For example: