PHP 5.3 中接口/抽象类的命名(使用命名空间)

2022-08-30 15:19:01

在 PHP 5.3 之前,我曾经这样命名接口/抽象类:

abstract class Framework_Package_Subpackage_Abstract {}
Framework/Package/Subpackage/Abstract.php

interface Framework_Package_Subpackage_Interface {}
Framework/Package/Subpackage/Interface.php

现在有了 PHP 5.3 并使用命名空间,我就不能再使用我的约定了,因为 和 是保留关键字。interfaceabstract

namespace Framework\Package\Subpackage;
abstract class Abstract {}
Framework/Package/Subpackage/Abstract.php

namespace Framework\Package\Subpackage;
interface Interface {}
Framework/Package/Subpackage/Interface.php

那么,我应该如何命名我的类/接口呢?


答案 1

当前的编码指南“PSR-2”基本上建议您将接口下放到一个目录并合并名称。

例如:

File \Vendor\Foo\Interface.php ===> \Vendor\FooInterface.php.

和使用条款,例如:

use \Vendor\Foo\Interface; ===> use\Vendor\FooInterface;

请参见: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md


答案 2

关于这个问题(抽象和接口),你可以看看Matthew Weier O'Phinney博客上的帖子“将OOP库和框架迁移到PHP 5.3” - 这是关于Zend框架的,以及他们如何在2.0中解决这个问题。

他们注意到的一件事是:

在其他OOP语言中,例如Python,C#,接口通过用大写的“I”前缀来表示接口;在上面的例子中,我们将有Zend::View::IView。

所以,在你的例子中,你会有这样的东西,我猜:

namespace Framework\Package\Subpackage;
abstract class ASubpackage {}
Framework/Package/Subpackage/ASubpackage.php

namespace Framework\Package\Subpackage;
interface ISubpackage {}
Framework/Package/Subpackage/ISubpackage.php

对此,你怎么看?(我没有以这种方式进行测试,但它看起来不是一个坏主意?


推荐