I / PHP OOP yeniyim.

8 Cevap php

Ben bu kavramlara yeni Açıkçası marka değilim. Eğer özellikleri veya yöntemlerine erişimi sınırlamak neden ben anlamıyorum. Bu sadece amaçlanan sonuçlara göre kod yazmak olacak gibi görünüyor. Neden yerine sadece o metodu çağıran değil, özel bir yöntem oluşturmak istiyorsunuz? Bu, (Ben doğru olduğunu belirten ediyorsam) tekrarlı nesnesi oluşturmak için bir çoklu geliştirici durum (yapmak değil pisliği diğer insanların iş), ya da sadece yanlışlıkla yapmak değil pisliği kendi iş yani?

8 Cevap

Tüm kapsülleme aşağı gelir. Bu sınıfın içi gizleme ve sadece ne hakkında bakmakta demektir. Eğer bir kredi kartı işleme sınıf olmasını istiyorsanız, gerçekten kredi kartı işler 'nasıl' umurumda değil. $creditCardProcessor->charge(10.99, $creditCardNumber); ve çalışma bekliyoruz: Sadece gitmek mümkün olmak istiyorum.

Bu kod aramak için güvenli olduğunu nerede biliyorum bazı yöntemler kamu ve diğerleri yaparak özel veya korunan, biz başkaları için bir giriş yolu bırakın. Kamu yöntemler ve değişkenler 'interface' denir.

Her sınıf için, bir implementation var. Bu sınıf görevini yürütmektedir nasıl. O ekler ne maddeler sınıfı maddeler ekler nasıl bir yüzlü yapma sınıf, vb ise, tüm uygulama parçasıdır. Dışındaki kod bilmek ve / veya uygulaması hakkında bakım gerekir.

Sınıfın diğer tarafı onun interface. Arabirim sınıfının geliştiricisi dışında kod tarafından çağrılabilir amaçlanan kamu yöntemleri. Bu, herhangi bir kamu yöntemini çağırmak ve düzgün çalışacak gerekir demektir.

Sizin son iki nokta oldukça doğru - Eğer malzeme ile berbat olması için birden geliştiricilerin gerekmez. Eğer yeterince uzun bir proje üzerinde çalışıyorsanız, size başında ne yaptığını çok unuttum fark edeceksiniz.

Böylece edebilirsiniz güvenle change bunu daha sonra bir şey gizleme için en önemli nedenlerinden biridir. Bir alan kamu ve birkaç ay sonra ise başka bir şey olur alan değişiklikleri, başın belada her zaman ki bunu değiştirmek istiyorum. Kamu Çünkü, bilmek ya da doğrudan bu alan erişilen kaç başka yerlerde hatırlamak için hiçbir yolu yoktur. O özel eğer, bunun dışında bu sınıfın dokunulmaz varlık değildir ki bir garantisi var. Muhtemelen genel bir yöntem sarılı ve kolaylıkla bu yöntemin davranışını değiştirebilir var.

Genel olarak, daha fazla bir şeyler, kamuoyuna daha başka kod ile uyumluluğu hakkında endişelenmenize gerek.

Bizim sınıfların tüketicilerin uygulama detayları hakkında bakım gerekmez böylece biz özel yöntemler yaratmak - onlar bizim sınıflar onlara sağlamak birkaç şık şeylere odaklanabilirsiniz.

Ayrıca, genel yöntemlerin her türlü kullanımını dikkate almak mecburiyetindeyiz. Yöntemleri Özel yaparak, bir sınıf desteklemek için sahip olduğu özelliklerden sayısını azaltmak, ve biz onları değiştirmek için daha fazla özgürlük var.

Bir arayan sıraya bir öğe ekler her zaman, bu sıranın kapasitesini artırmak için gerekli olabilir - bir Queue sınıf var demek. Çünkü altta yatan uygulama, kapasite ayarı önemsiz değildir, bu nedenle Enqueue fonksiyonu okunabilirliği artırmak için ayrı bir işlev içine patlak. Arayanların bir sıranın kapasitesi (onlar için bunu hallediyoruz) umurumda değil, çünkü sen yöntem özel yapabilirsiniz: arayanlar gereksiz yöntemlerle dalıp alamadım, Arayanların saçma şeyler yapacak endişelenmenize gerek yok kapasitesi ve Uygulama Eğer (yine de sınıf tarafından tanımlanan sınırlı kullanım olguları içinde kapasitesini ayarlar sürece) kendi sınıfını kullanan kodu bozmadan istediğiniz zaman değiştirebilirsiniz.

Encapsulation kullanarak çeşitli nedenleri, güçlü biridir vardır: başkası tarafından yazılmış bir büyük ve karmaşık bir kütüphane kullanarak düşünün. Her nesne korumasız Eğer bilmeden erişen veya geliştirici bu şekilde manipüle edilmesi amaçlanan asla değerler değişiyor olabilir.

Veri gizleme programı kavramsallaştırma uygulaması daha kolay ve daha kolay hale getirir.

Her kapsülleme ilgili. Yöntem kolay şeyler yapmak zarif fonksiyonlarını teşhir ederken iç homurtu işi olduğunu şahsidir. Örneğin vb, sorgu güvenli hale, bir tek db nesnesi doğrulamak için 4 iç işlevlerini kullanan bir $ product-> insert () fonksiyonu olabilir - bu maruz gerekmez iç fonksiyonları ve çağrılırsa, kudreti karmaşa diğer yapılar veya akışları size, geliştirici, yerine koyduk.

a multiple developer situation (don't mess up other people's work), or just so you don't mess up your own work accidentally?

Temelde bu iki şey. Bir yöntem kamu yapma o özel takip ve güçler müşterilerine "umurumda değil gerektiğini, bu uyarı ve hangi müşteriler olmadan değişebilir bir uygulama ayrıntı" diyor yapım, "bu sınıf müşterileri tarafından kullanılacak olması gerekiyordu nasıl" diyor tavsiye.

Birkaç iyi belgelenmiş kamu yöntemleri ile A sınıfı da dahil olmak üzere her şeyi public bir daha (6 ay içinde ilk kez ona bakarak, iyi özgün yazarı olabilir) aşina değil birisi tarafından kullanımı çok daha kolaydır Eğer umurumda değil, tüm küçük uygulama detayları.

Bu işbirliği daha kolay hale getirir, ne parçaları sık sık değiştirmek gerekir ve bunlar sadece kamu yöntemleri kullanırsanız nesne anlamlı bir durumda olacağını garanti edebilirsiniz sınıfların söyleyin.

Bu özel / kamu / ayırt kadar sıkı olması gerekmez ne olursa olsun (ben dil tarafından zorlanan demek). Örneğin, Python, bu bir adlandırma kuralı ile gerçekleştirilir. Eğer kamu değil olarak işaretlenmiş bir şey ile berbat etmemeliyiz biliyorum.

Örneğin - Özel / korumalı yöntem başka (kamu) yöntemi denir bazı sınıfın parçası olabilir. O kısmı daha fazla kamu yöntemleri denir, bu mantıklı. Ve henüz bu yöntemler başka bir yerde denmesini istemiyorum.

Bu sınıf özellikleri ile oldukça aynı. Evet, tüm kamu sınıflar yazmak, ama bunun içinde nedir eğlenceli?