PHP/Symfony2,一个文件中有两个类,哪个应该是第一个?

PHP/Symfony2,一个文件中有两个类,哪个应该是第一个?,php,symfony,Php,Symfony,我有些奇怪的东西。它在Symfony控制器中,但我认为这无关紧要。在控制器文件中,在控制器类旁边,我创建了一个带有常量的简单类,以使查询中的某些内容更加清晰: class ExportType { const EXPORT_WORLDWIDE = 1; const EXPORT_EU = 2; } 当然,顶部只有一个名称空间。这些常量用于控制器的一个操作中 每次使用PhpStorm的代码自动格式化时,该类都会移动到文件的顶部。好的,我不介意,PhpStorm在这里不报告任何错误

我有些奇怪的东西。它在Symfony控制器中,但我认为这无关紧要。在控制器文件中,在控制器类旁边,我创建了一个带有常量的简单类,以使查询中的某些内容更加清晰:

class ExportType
{
    const EXPORT_WORLDWIDE = 1;
    const EXPORT_EU = 2;
}
当然,顶部只有一个名称空间。这些常量用于控制器的一个操作中

每次使用PhpStorm的代码自动格式化时,该类都会移动到文件的顶部。好的,我不介意,PhpStorm在这里不报告任何错误。但是看起来像PHP还是Symfony?不喜欢它,因为每次helper类位于顶部时,都会抛出FileLoaderLoadException,表示该类在此命名空间中不存在。
当它在底部时,没有问题。这正常吗?是否应该在使用它的类之后声明used类???

问题可能来自Composer,您的代码根本不符合PSR-0/4,这是Composer用于自动加载文件的约定。您会收到一个错误,因为它无法找到要加载的文件


如果声明为second,它可能会工作,因为您使用它的唯一位置是在控制器中。在其他地方使用常量,它将自动失败。

愚蠢的问题:为什么不将这些类移到其他文件中?我是说,把它们放在同一个文件里有什么好处?第二个愚蠢的问题:因为您使用symfony,为什么不利用parameters.yml文件或环境文件来定义此类常量?通过这种方式,您可以在所有应用程序中检索它们。请显示控制器方法代码的相关部分,该部分使用您的帮助器类。您可能有名称空间问题。我一直在做这类事情,从来没有注意到任何问题。所以看起来我应该把所有这样的常量类放在单独的文件夹和命名空间中使用它们?如果它们只从一个文件中使用,这似乎没有多大意义,但我认为这是符合PSR的方式…基本上是的。如果您使用的是Composer,则每类1个文件。如果您想要一个声明函数、常量等的文件,则必须使用files指令将它们添加到composer.json中:@Théo psr4和composer都不关心一个文件中是否有多个类。您可能无法自动加载这些文件,但只要文件本身最终被加载,那么一切都会正常。>您可能无法自动加载,这就是问题所在,正是因为Composer关心。