2016-04-11 34 views
0

Bugün MVC hakkında bir Eğitici okudum, bu adam özel bir üye değerine erişmek için magic-methods (__get & __set()) kullanıyordu. (LINK) İlk önce, __get ve __set'in ne yaptığına dair kafam karışmıştı, ama sonunda internetten kurtulamam gerekenleri okuduktan sonra, üye dışarıdan erişilemezse, bu yöntemlerin çağrıldığını anladım. kolay anlaşılması Onun IMO bir yol - sanırım, normal alıcı ve ayarlayıcı kullanabilirsiniz__get() & __set() yöntemlerinin anlamı nedir?

class Foo { 
    private $bar; 

    public __set($value) { 
     $this->bar = $value; 
    } 

    public __get() { 
     return $this->bar; 
    } 
}

:

Şimdiye kadar ...

Ama böyle bir kod olması mantıklı değil

Üyeye __get & __set ile erişmek isterseniz, aynı zamanda üye herkese açık hale getirebilirsiniz - Ben de bunun nedenini anlamıyorum. Bana (belki de bir örnekle) bu 2 yöntemin ne anlama geldiğini söyleyebilir misin?

+0

Sağladığınız bağlantıda örnek olarak yazdıklarınızdan bir şey görmüyoruz. Bir dizi kullanıyor, tek bir özellik değil '$ this-> vars [$ index] = $ value ; '. bir dizindeki tuşlara erişmek için '__set' ve' __get' kullanmanın anlamı oldukça okunaklı. Ya da her anahtar için bir erişimci yazmak ister misiniz? – dbf

+0

Bu doğru ama bunu farklı öğreticilerde de gördüm .... Ayrıca bir dizi ayarlamak için normal alıcıyı ve ayarlayıcıyı da kullanabilirsiniz değil mi? – Petschko

+0

Yazdığım gibi, bunları kullanmak meşru, bunları kullanmak akıllıca olduğunu söylemedim;) – dbf

cevap

1

Programınızı geliştirirsiniz ve özniteliklerinize erişimi denetlemeniz gerekmediğini düşünürsünüz. Bu yüzden halkı özel yerine koymaktasınız. Ancak bakım sırasında, sınıfınızı bir öznitelik için 0 olarak yasaklanacak bir sınırlama getirmek için değiştirmeniz gerektiğini anlarsınız. Bu değişikliği yapmak için bir ayarlayıcı eklemeniz ve özelliğinizi özel olarak harcamanız gerekir. Sonuç: Bu değişikliği tüm bu sınıf müşterilere etkilemenizi sağlayacaktır.

Baştan beri ayarlayıcı ve getto kullanmış olsaydınız, bakım çok daha kolay olurdu.

+0

Bu yüzden daha sonraki değişiklikleri daha kolay yapmak için mi? - Ama programınızı bunlarla yapmamak – Petschko

+1

Nesne yönelimli programlama, bir sınıf yöntemlerinin ve özelliklerinin görünürlüğünü belirtmenizi sağlar. Mülkler söz konusu olduğunda, onlara kamuya açıklık kazandırılması çok tavsiye edilir, çünkü bu şekilde değerlerin izlenmesi mümkün olmaksızın değiştirilebilecektir. – Pierre

+1

Özelliklerinin erişimini GetTell ve Setter ile enkapsülasyon olarak koruyun. Nesne yönelimli programlamada, kapsülleme, bir nesnedeki bilgilerin korunması ve sadece o nesnenin manipüle edilmesine yönelik yöntemler önermektir. Böylece, nesnede bulunan bilgiler ile ilişkili özellikler, nesnenin yöntemleri tarafından sağlanacak/onaylanacak ve artık harici kullanıcının sorumluluğunda olmayacaktır. Dış kullanıcı, doğrudan bilgiyi değiştiremez ve nesnenin davranışsal özelliklerini tehlikeye atar. – Pierre