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で、名前空間を使用すると、interface
とabstract
が予約済みのキーワードであるため、規則を使用できなくなります。
namespace Framework\Package\Subpackage;
abstract class Abstract {}
Framework/Package/Subpackage/Abstract.php
namespace Framework\Package\Subpackage;
interface Interface {}
Framework/Package/Subpackage/Interface.php
では、クラス/インターフェイスにどのような名前を付ける必要がありますか?
現在のコーディングガイド「PSR-2」では、基本的に、インターフェイスを1つのディレクトリにドロップして、名前を組み合わせることが推奨されています。
例えば:
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
この質問(抽象とインターフェース)については、投稿 " Migrating OOP Libraries and Frameworks to PHP 5. = "Matthew WeierO'Phinneyのブログ-ZendFrameworkと、2.0でその問題を解決する方法について説明しています。
彼らが注意することの1つは:
他の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
あれについてどう思う ? (私はこの方法をテストしていませんが、悪い考えのようには見えませんか?)
サブパッケージの要約、サブパッケージのインターフェース
個人的には、ハンガリアン記法の使用を避け、インターフェース名のJava標準に従うことを検討してください。つまり、他のクラスと同じようにわかりやすい名前が付けられています。 this SO質問 ハンガリアン記法の詳細についての議論。
機能や動作を示す一般的で説明的な名前を使用する良い例は、「Countable」、「Iterator」、「ArrayObject」などのPHP独自のSPLにあります。
次のようなこともできます。
src/Chess/Piece.php
<?php
namespace \Chess;
abstract class Piece implements \Chess\PieceInterface {}
src/Chess/PieceInterface.php:
<?php
namespace \Chess;
interface PieceInterface {}
src/Chess/Piece/Pawn.php:
<?php
namespace \Chess\Piece;
class Pawn extends \Chess\Piece {}
これが私が自動読み込みを設定する方法です composer.json
{
"autoload": {
"psr-0": {
"": "src/"
}
}
}
正直なところ、Javaのように「extends」や「implements」というキーワードがないため、ハンガリアン記法はC#で導入されたと思います。したがって、規則を区別するために、それをIViewと呼ぶようになりました。 Javaでは、インターフェースはViewのみと呼ばれ、実装はDefaultViewImpl、SmartyViewImplなどと呼ばれます。 PHP doesはキーワードを拡張して実装しているので、Java規則を使用するのは理にかなっています。私は、次のような議論を聞いたことがあります。ハンガリアン記法は、クラス名を見るだけでAPI要素を識別できるようにするのに役立ちます。その場合、私はそれをIViewまたはAbstractViewと呼びます。