PHP 5.3 arabirimleri / soyut sınıflar adlandırma (ad kullanarak)

5 Cevap php

Önce ben böyle arayüzleri / soyut sınıflar adlandırmak için kullanılan PHP 5.3:

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

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

Şimdi PHP 5.3 ve kullanarak ad alanları ile Çünkü interface, artık benim kongre kullanamazsınız ve abstract anahtar saklıdır.

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

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

Yani, ben gibi benim sınıfları / arabirimleri ne isim vermeliyiz?

5 Cevap

Geçerli bir kodlama kılavuzu "PSR-2" temelde bir dizin aşağı bırak arayüzü ve adını birleştirir önerir.

örneğin:

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

ve kullanım stament örn:

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

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

Zend Framework hakkında ve nasıl 2.0 bu sorunu çözmek olabilir - bu soruya (Özet ve Interface) hakkında, Matthew Weier O'Phinney blogunda "Migrating OOP Libraries and Frameworks to PHP 5.3" yazı bir göz olabilir.

Onlar unutmayın şeylerden biri:

In other OOP languages, such as Python, C#, interfaces are denoted by prefixing the interface with a capital 'I'; in the example above, we would then have Zend::View::IView.

Yani, örneğin, sen böyle bir şey olurdu sanırım:

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

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

What do you think about that ? (I have not tested this way, but it doesn't look like a bad idea ? )

Ben bu iki tartışmalar üzerinden bir göz alarak tavsiye:

However: Ben şahsen Macar Gösterimi herhangi kullanımını kaçınarak tavsiye ve arayüz adları için Java standart aşağıdaki düşünün; yani, onlar sadece başka bir sınıf gibi tanımlayıcı fişlendi. this SO question Macar notasyonu ins ve çıkışları bir tartışma için bkz.

"Sayılabilir", "Iterator", "DiziNesnesi:" işlevi veya davranışın göstergesidir jenerik, açıklayıcı isimler kullanarak iyi bir örnek gibi PHP'nin kendi SPL, bulunabilir.

Siz de böyle bir şey yapabilirsiniz:

src / Satranç / Piece.php

<?php

namespace \Chess;

abstract class Piece implements \Chess\PieceInterface {}

src / Satranç / PieceInterface.php:

<?php

namespace \Chess;

interface PieceInterface {}

src / Satranç / Adet / Pawn.php:

<?php

namespace \Chess\Piece;

class Pawn extends \Chess\Piece {}

İşte nasıl olur kurulum autoloading composer.json bulunuyor

{
    "autoload": {
        "psr-0": {
            "": "src/"
        }
    }
}

Benim görüşüme göre, bu çözmek için en iyi yolu, sadece classnames için sınıf ekleyerek gereğidir.

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

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

Bu (ancak, mükemmel çalışıyor) hala mükemmel değil ama orijinal fikir benzer kod tutar unutmayın ;)