SORU
5 ŞUBAT 2010, Cuma


PHP bir sınıf nedir?

Ciddi konuları bir kitaptan PHP dersleri anlamakta güçlük çekiyorum. Çok zor görünüyorlar. Bunların amacı nedir ve nasıl çalışır?

CEVAP
5 ŞUBAT 2010, Cuma


Özetlebir Sınıf nesnesi için bir plandır. Ve bir nesne kavramsal olarak uygulamanızda bir şey ile ilgili Devlet ve Sorumluluk saklar ve genellikle bu etkileşim için bir programlama arayüzü sunuyor. Bu kodu yeniden Teşvik ve sürdürülebilirliği artırır.


Bir Kilit düşünün:

namespace MyExample;

class Lock
{
    private $isLocked = false;

    public function unlock()
    {
        $this->isLocked = false;
        echo 'You unlocked the Lock';
    }
    public function lock()
    {
        $this->isLocked = true;
        echo 'You locked the Lock';
    }
    public function isLocked()
    {
        return $this->isLocked;
    }
}

namespace, private public bildirimi şu an görmezden geliyor.

Kilidi sınıfı uygulamanızın tüm Kilitler için bir plandır. Bir Kilit de olabilirkilitliyakilitliBu tarafından temsil edilmektedirözellik$isLocked. Sadece bu iki devlet olabilir bu yana, bir Boolean (true false) uygulayan belirtmek için kullanıyorum. Bunun sayesinde Kilit ile iletişim kurabilirimyöntemlerilock ve devletin buna göre değişecektir unlock,. isLocked yöntem bana Kilidi mevcut durumunu verecektir. Bu plan bir nesne oluşturduğunuzda, benzersiz durum, örneğin saklanması

$aLock = new Lock; // Create object from the class blueprint
$aLock->unlock();  // You unlocked the Lock
$aLock->lock();    // You locked the Lock

Hadi başka bir kilit de kendi devlet şifrelenmiş oluşturun

$anotherLock = new Lock;
$anotherLock->unlock(); // You unlocked the Lock

ama her nesne kendi durumunu saklar çünkü, ilk kilit kilitli kalır

var_dump( $aLock->isLocked() );       // gives Boolean true
var_dump( $anotherLock->isLocked() ); // gives Boolean false

Şimdi bir Kilit ya kilitli ya da kilitli tutmak tüm reponsibility Kilit sınıf içinde encaspulated. Bir şey kilitlemek istediğiniz ve eğer bir Kilit değiştirebilirsiniz nasıl çalıştığını değiştirmek isterseniz, her zaman Kilit yerine tüm sınıfların planı yeniden inşa etmek zorunda değilsinsahipörneğin bir Kapı Kilidi

class Door
{
    private $lock;
    private $connectsTo;

    public function __construct(Lock $lock)
    {
        $this->lock = $lock;
        $this->connectsTo = 'bedroom';
    }
    public function open()
    {
        if($this->lock->isLocked()) {
            echo 'Cannot open Door. It is locked.';
        } else {
            echo 'You opened the Door connecting to: ', $this->connectsTo;
        }
    }
}

Şimdi Kapı bir nesne oluşturmak için bir Kilit nesnesi atayabilirsiniz. Kilit nesnesi bir şey kilitli olup tüm sorumluluk işler veya kilitli beri, Kapıyı bu önemsemek zorunda değil. Aslında bir Kilit kullanabilirsiniz herhangi bir nesne, örneğin bir Göğüs bakımı için olmazdı

class Chest
{
    private $lock;
    private $loot;

    public function __construct(Lock $lock)
    {
        $this->lock = $lock;
        $this->loot = 'Tons of Pieces of Eight';
    }
    public function getLoot()
    {
        if($this->lock->isLocked()) {
            echo 'Cannot get Loot. The chest is locked.';
        } else {
            echo 'You looted the chest and got:', $this->loot;
        }
    }
}

Gördüğünüz gibi, Göğüs reponsibility bir kapı farklıdır. Bir göğüs kapı oda ayıran ise yağma içerir. Her iki sınıf kilitli ya da kilitsiz devlet kodu olabilir, ama ayrı Kilit bir sınıf ile, gerek yok ve Kilidi yeniden kullanabilirsiniz.

$doorLock = new Lock;
$myDoor = new Door($doorLock);

$chestLock = new Lock;
$myChest new Chest($chestLock);

Göğüs ve Kapı şimdi kendi benzersiz kilitleri var. Eğer kilidi Kuantum Fiziği gibi aynı anda birden fazla yerde bulunabilir büyülü bir kilit olsaydı, her ikisi de göğüs ve kapı, örneğin aynı kilit atayabilirsiniz

$quantumLock = new Lock;
$myDoor = new Door($quantumLock);
$myChest new Chest($quantumLock);

25 ** $quantumLock iki Kapı ve Göğüs kilidi olacaktır.

Kuantum Kilitler kötü bir örnek olduğunu kabul etsem de her yerde devlet ve sorumluluğu yeniden yerine nesneleri paylaşma kavramı göstermektedir. Gerçek dünyadan bir örnek sınıfları geçmesi veritabanı nesnesi olabilirkullanarakveritabanı.

Yukarıdaki örnekler, bir Göğüs veya lock() unlock() yöntemleri kullanmak için bir Kapı Kilidi nasıl göstermek unutmayın. Eğer dışarı çalışmak için bir egzersiz (ya da eklemek istediğiniz başka biri) olarak bırakıyorum.

Ayrıca onlarla çalışmak nasıl derinlemesine açıklama Sınıfları ve Nesneleri ve daha fazlası için When to use self vs $this? kontrol edin

Bazı ek kaynaklar bakın

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Boiler Room

    Boiler Room

    10 Mayıs 2012
  • jbignacio

    jbignacio

    13 Mart 2006
  • pucksz

    pucksz

    24 Mart 2006