Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP - Symfony2.4 Can I have multiple classes in single file?

I am using Vzaar's PHP Library for uploading videos from my website to their server space.

Now point is - in their library there are some PHP files in which more than one class exists and no class with same file name exists in same file.

i.e. have a look at OAuth.php, there is no class with name OAuth in that file.

Question raised in my mind is

When I create any PHP class file, can I create multiple classes in side one file, and later I can use that file in my code or I can use that reusable code in other project as well.

Should creating such files is good practice?

If the class is of 15 to 20 lines long, then should I create a separate file or I should include that in one file only, like OAuth.php.

Please guide with exact reason, if I will get links of wiki where proper explanation is given, then it will be best.

like image 324
gkd Avatar asked Oct 21 '25 16:10

gkd


2 Answers

Putting more than one class in one file in general is a bad practice, and in Symfony2 even more because of the way class autoloader works.

When autoloader is looking for Acme\DemoBundle\SomeClass class it expects it will be in Acme\DemoBundle\SomeClass.php file. So in case you have a second class in the same file it won't work.

Check also PSR standards for class autoloading.

like image 51
Tomasz Madeyski Avatar answered Oct 24 '25 08:10

Tomasz Madeyski


Despite I don't like to define more than one class per file I would like to point it out that PSR-4 is not against this practice if the class scope is private.

Quoting Symfony2 coding standards resource (http://symfony.com/doc/current/contributing/code/standards.html)

Define one class per file - this does not apply to private helper classes that are not intended to be instantiated from the outside and thus are not concerned by the PSR-0 and PSR-4 autoload standards;

In this other example (Thanks to Xavi Montero) you can see that the class Psr4AutoloaderClassTest has a helper class MockPsr4AutoloaderClass defined in the same file. So in general you should not, but for a "private helper" it's okey. https://www.php-fig.org/psr/psr-4/examples

like image 29
manuelbcd Avatar answered Oct 24 '25 08:10

manuelbcd