PHP OOP: Neden bir alıcı?

7 Cevap php

Ben OOP ile bir acemi değilim, ben bir gaz giderici yöntemin gerekliliğini kavrayarak sorun yaşıyorum.

Örnek olarak:

class foo {
    $this->bar = "test";
}

$foo = new foo();
echo $foo->bar;

Bu durumda potansiyel tuzaklar ben düzgün bir güncelleştirilmiş değeri doğrulamak için bir ayarlayıcı yöntemi kullanıyorum varsayarak, nelerdir?

7 Cevap

Bir alıcı yöntemin değeri, daha sonra sizin uygulanmasını değiştirmek, ancak arayüz, aynı tutmak sağlamasıdır.

Burada klasik cevabı:

Eğer bu büyük değil, şimdiye kadar, (derece F) bir sıcaklık temsil eden bir özelliğe sahip bir sınıf yazmak ve getTemp yönteminde sarın söylüyorlar. Şimdi C de derece erişmek için gerekir, bu nedenle sıcaklık dönüştürür ve eski ve yeni yollar çalışmak hem çok yeni sürümünü döndüren bir getTempInCelcius yöntem yazabilirsiniz. Daha sonra içeride derece C kullanmak için sınıf yeniden böylece getTempInCelcius getTemp çok daha fazla çağrı alır sizin günlükleri malumunuzdur. Eğer bu sınıfını kullanarak her şeyi bir değişiklik olmadan mümkün olmazdı getTemp daki sıcaklık kapsüllü etmemişti. Sadece orada mantığı şeyler ve tüm herkes fark edecek bir alıcı kullanarak performans artışı olduğunu.

Erişimci yöntemleri değeri özel, yani kapsülleme bunun çoğu tutarken onlar bir sınıfın belirli alanlarına erişim için izin olmasıdır. Ayrıca, sabit kalması için sınıf imza sağlar.

Alıcı yöntemleri kullanmanın çeşitli avantajları vardır. Zaten, biçimlendirme internals değiştirseniz bile aynı sınıfın dış arabirim tutmak, ve hata ayıklama zikredilen. Hesaplanmış bir özelliği var eğer ben de önbelleğe alma için bazen bunları kullanmak.

örneğin

class TestClass
{
    private $_cachedTestProperty;

    public function __get($varname)
    {
        switch ($varname)
        {
            case "testProperty":

                if (!isset($this->_cachedTestProperty))
                {
                    $this->_cachedTestProperty = /*calculate property*/
                }

                return $this->_cachedTestProperty;

                break;
        }
    }
}

Bunu yaparsanız sınıfa başka değişiklik obselete bu işler varsa, önbelleğe alınan değer unset hatırlamak gerekir

Onlar da sağlayabilir salt okunur korumalı / özel değişkenlere erişimi

Her zaman olduğu gibi bu şeyler, bir ortak özelliği ya da bir alıcı kullanmak isteyip istemediğinizi yapmak için çalışıyoruz ne bağlıdır. Onlar, her iş için doğru aracı kullanarak onun bir durum daha iyi değil

Alıcılar / belirleyiciler bir büyük avantajı değerler değişmiş ve sınarken erişildiğinde izlemek için fonksiyonları ayıklama kodu koyabilirsiniz olmasıdır. Değişkenin herhangi bir biçimlendirme veya işlem yapılması gerekiyorsa Ayrıca gaz giderici koymak (veya farklı alıcılar var) olabilir.

Bu size daha fazla esneklik sağlar. Kod genellikle başlangıçta planlanandan çok daha fazla bir şey yapmak gerek sonunda olabilir. Eğer $ bar hesaplanan bir değer olmak istiyorum ama hala $ foo-> GetBar istediğiniz karar Örneğin, () bir dize döndürmek için.

function getBar()
{
    if(date('w')==0)
        return 'test';
    else
        return 'live';
}

Eğer karar verdiyseniz, sadece (hatta kodu kapalı bir gün hak ediyor çünkü) bir Pazar günü "test" dönmek istedim.

Bir başparmak kuralı size yapısında members maruz asla gerektiğidir. Üyeler kendi sınıfının kapsamında değişkenler vardır.

Şimdi, size dış dünyaya maruz gereken ne sadece göstermek için daha iyi bir yol verecek, hangi söyledi ile her zaman özel olarak sınıf değişkenleri işaretlemek gerekir ve onlar için Erişimcilerini oluşturun.

Eğer alıcı ve ayarlayıcıları kullandığınızda girdi ve çıktıya hem de biçimlendirebilirsiniz için ihtiyacınız eğer Ayrıca, veriler üzerinde kontrole sahip.

object oriented programmng on php.net kavramları hakkında daha fazla okuyun