【问题标题】:PHP - Symfony2.4 Can I have multiple classes in single file?PHP - Symfony2.4 我可以在一个文件中有多个类吗?
【发布时间】:2014-08-03 16:50:32
【问题描述】:

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

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

即看看OAuth.php,该文件中没有名称为OAuth 的类。

我想到的问题是

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

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

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

请以确切的理由指导,如果我能获得给出正确解释的wiki链接,那将是最好的。

【问题讨论】:

    标签: php symfony code-reuse


    【解决方案1】:

    在一个文件中放置多个类通常是一种不好的做法,在 Symfony2 中更是如此,因为类自动加载器的工作方式。

    当自动加载器正在寻找Acme\DemoBundle\SomeClass 类时,它预计它将在Acme\DemoBundle\SomeClass.php 文件中。因此,如果您在同一个文件中有第二个类,它将无法工作。

    还要检查 PSR 类自动加载标准。

    【讨论】:

    • 是的,这是正确的,但是许多第三方库在一个文件结构中包含许多类。我不是他们想要实现的,通过编写 5 行的类,其中只有 3 到 4 个成员变量存在,仅此而已,示例是同一个库,无论如何感谢您的输入@Tomasz
    【解决方案2】:

    尽管我不喜欢为每个文件定义多个类,但我想指出的是,如果类范围是私有的,PSR-4 并不反对这种做法。

    引用 Symfony2 编码标准资源 (http://symfony.com/doc/current/contributing/code/standards.html)

    为每个文件定义一个类 - 这不适用于私有助手 不打算从外部实例化的类和 因此不受 PSR-0 和 PSR-4 自动加载标准的关注;

    在另一个示例中(感谢 Xavi Montero),您可以看到 Psr4AutoloaderClassTest 类在同一文件中定义了一个帮助类 MockPsr4AutoloaderClass。所以一般来说你不应该,但对于“私人助手”来说,这没关系。 https://www.php-fig.org/psr/psr-4/examples

    【讨论】:

    • 在这个 PSR-4 示例页面 php-fig.org/psr/psr-4/examples 中,您可以看到,例如,Psr4AutoloaderClassTest 类在同一个文件中定义了一个帮助类 MockPsr4AutoloaderClass。所以一般来说你不应该,但对于“私人帮手”来说没关系。
    • 感谢哈维的评论,我添加它是为了丰富答案。
    猜你喜欢
    • 2010-11-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多