Convention over Configuration
We don't want you to waste time when you program, so we follow the principles of Conventions Over Configuration.
Following these rules will also make it easier to maintain your code in the future by other developers.
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
Naming
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:
thephpleague/skeleton - A skeleton repository for packages
pds/skeleton - Names for your root-level directories
Database Conventions
Table names should be singular, e.g. when we have a User entity class, the table in the database should be named
user
by default. See the reasoning behind it hereEntity property names are used for column names.
Entity properties that are named ID or classname ID are recognized as primary key properties.
A property is interpreted as a foreign key property if it's named
<navigation property name><primary key property name>
(for example, StudentID for the Student navigation property since the Student entity's primary key is ID). Foreign key properties can also be named the same - simply<primary key property name>
(for example, EnrollmentID since the Enrollment entity's primary key is EnrollmentID).
Common rules
All methods must have type declaration and return type declaration.
Methods without return statement must declared with
void
as their return type.Class properties must have typed properties (PHP 7.4+).
Don’t mix data types for parameters and return types, except for
nullable
.Don’t
extend
classes or createabstract
classes for the sake of “code reuse”, except for traits with test code only.Create
final
classes by default, except you have to mock it (e.g. repositories).Create
private
methods by default. Don’t createprotected
methods.All method parameters must be used.
Dependency injection
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.
Tools
Use a static code analyzer to detect bugs and errors. For example:
Read more
http://bestpractices.thecodingmachine.com/
https://odan.github.io/learn-php/
File Uploads
For files that are uploaded by users, each module should use the
/uploads
folder
In this section we used materials from various authors, incl. Daniel Opitz
Last updated