You should put every PHP class in its own file, if you want your project to be compatible with (for example) PSR-4 (Autoloader).
Citing from the PSR-4 specification:
-
When loading a file that corresponds to a fully qualified class name …
- A contiguous series of one or more leading namespace and sub-namespace names, not including the leading namespace separator, in the fully qualified class name (a “namespace prefix”) corresponds to at least one “base directory”.
- The contiguous sub-namespace names after the “namespace prefix” correspond to a subdirectory within a “base directory”, in which the namespace separators represent directory separators. The subdirectory name MUST match the case of the sub-namespace names.
- The terminating class name corresponds to a file name ending in
.php
. The file name MUST match the case of the terminating class name.
So, if you create a class Person
in MyProject\Model
namespace, the autoloader will find it only in a …/Model/Person.php
file. And an Employee
class must go to a separate …/Model/Employee.php
file in order to be available to the autoloader.