PHP - Symfony2.4:我可以在一个文件中拥有多个类吗?

4

我正在使用VzaarPHP库将从我的网站上传视频到他们的服务器空间。

现在的问题是 - 在他们的库中有一些PHP文件,其中存在多个类,并且同一文件中不存在具有相同文件名的类。

例如,请查看OAuth.php,该文件中没有名称为OAuth的类。

我的问题是:

当我创建任何PHP类文件时,我可以在一个文件中创建多个类,然后稍后我可以在我的代码中使用该文件,或者我也可以在其他项目中使用可重用的代码。

创建这样的文件是好的做法吗?

如果类长度为15至20行,则我应该创建单独的文件还是应该将其包含在一个文件中,如OAuth.php。

请用确切的原因指导,如果我能得到维基链接,说明得当,那就最好了。

2个回答

5
通常情况下,在一个文件中放置多个类是一种不好的做法,而在Symfony2中更是如此,因为类自动加载器的工作方式。
当自动加载器正在寻找Acme\DemoBundle\SomeClass类时,它期望它将在Acme\DemoBundle\SomeClass.php文件中。因此,如果您在同一个文件中有第二个类,它将无法正常工作。
还要检查PSR类自动加载标准。

是的,这是正确的,但许多第三方库都采用一个文件结构中包含许多类的方式。我不知道他们想要实现什么,只编写了5行代码的类,其中只有3到4个成员变量存在,没有其他内容,例如同一库,无论如何感谢@Tomasz的意见。 - gkd

4
尽管我不太喜欢在一个文件中定义多个类,但我想指出,如果类的范围是private,那么PSR-4并不反对这种做法。
引用Symfony2编码标准资源(http://symfony.com/doc/current/contributing/code/standards.html)
定义一个文件只有一个类 - 这不适用于私有helper类,因为它们不打算从外部实例化,因此不涉及PSR-0和PSR-4自动加载标准;
在这个示例中(感谢Xavi Montero),您可以看到类Psr4AutoloaderClassTest在同一文件中定义了一个helper类MockPsr4AutoloaderClass。所以一般情况下不应该这样做,但对于“私有helper”,这是可以接受的。 https://www.php-fig.org/psr/psr-4/examples

1
在这个 PSR-4 的示例页面 https://www.php-fig.org/psr/psr-4/examples/ 中,你可以看到例如 Psr4AutoloaderClassTest 类在同一个文件中定义了一个辅助类 MockPsr4AutoloaderClass。因此一般来说你不应该这样做,但对于“私有辅助类”来说是可以的。 - Xavi Montero
1
谢谢你的评论Xavi,我会加入以丰富答案。 - manuelbcd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接