Özel yöntemleri veya Korumalı yöntemleri kullanmak için en iyi?

9 Cevap php

Benim PHP projeleri bir sürü olarak, ben genişletmek niyetinde değilsiniz, kamu dışı işlevlere sahip sınıfları ile sonuna kadar.

Korumalı, ya da özel olarak bu ilan için iyi midir?

Çok daha muhafazakar bir yaklaşım onları özel yapım, ama onlar ben yöntemi uzatılabilir istiyorum ve yöntemleri temel sınıflar tarafından genişletilmiş hangi net yaparsa daha sonra korumalı yapılmış olabileceğini iddia edilebilir - Ben argümanlar hem de yollarını görebilirsiniz.

Bu değişiklik olmadan kod uzanan bir teorik gelecek geliştirici engellemektedir diğer yandan, bir şekilde antisosyal özel kullanıyor?

9 Cevap

Aksi halde bunları gerekir kadar benim içgüdüsü, onları özel tutmaktır.

Bu insanlar kodu kullanabilirsiniz konusunda oldukça diktatörlük olduğunu yöntemleri özel yapım, onları 'nihai' yapma kadar aynı şekilde, antisosyal olduğunu (ne yazık ki bağlantıyı kaybettiyseniz) öne sürülmüştür.

Ancak, ikna değilim, ve size gerçekten gereken tek maruz gerektiğini kabul ediyoruz. Istisnası kullanıcıların öngörüyoruz asla şekilde (genel anlamda) kodunuzu uzatmak istediğiniz bekleyecekler bir kütüphane ya da araç olurdu. Hangi korumalı iyi seçilmiş verme yöntemleri vaka esnek noktaları sağlamak olarak görülebilir.

Ben size ihtiyacınız olduğunda sadece gerekenler maruz gerektiğini düşünüyorum. Bu kolay değişikliklerin etki değerlendirmesini yapıyor yapar. bir yöntem özel ise bunu değiştirmek eğer yani, sen know etkisi az olacaktır.

Eğer miras için bir sınıf oluşturmak için düşünüyorsanız, yani diğer geliştiricilerin size amaçlanan çizgisinde sınıfın davranışını değiştirmek için izin korumalı bu yöntemleri yapmak, bu şekilde tasarlamanız gerekir. Sadece korunan tüm yöntemleri yaparken çok iyi bir tasarım değil. Tüm korumalı yöntemler ortak API parçası haline unutmayın, böylece daha sonra şeyleri değiştirmek, diğer insanların kodunu kıracak.

Eğer miras için tasarlarken değilseniz, genel olarak, bunu yasaklamak gerekir.

Şahsen, bu doğru belki olabilir kadar özel yapmak için bulabilirsiniz. Ben sadece her yöntemi bakmak ve türetilmiş bir sınıf aramak için muktedir istiyorsanız kendime soruyorum. Her şey yaprakları yanlış denilen yöntemleri sahip kapıyı korumalı yapma.

Ben ya da özel forbiddden sürece "her şeye izin var mı" özellikle izin verilmediği sürece yasaktır herşey var "aşağı sorulara geliyor sanırım.

Bir ek faktör bir sonraki sürümde korumalı özel bir yöntem yapmak kolay olmasıdır. Eğer geçersiz kılmak başka hangi kod asla bilemezsiniz gibi, korumalı yapılmış bir kez yöntem özelleştirilmesi için neredeyse imkansız.

Peki, özel anahtar kelime bir amacı ile tasarlanmıştır. Eğer değişkenler size miras sınıfları (veya insanların sınıflarında onlarla oynamak istemiyorum) kaplamak istemiyorsanız o zaman neden hatta onları korumalı yapmak düşünüyorsunuz?

İnsanların avret dokunmasına izin vermeyin :)

Ben özel olarak yöntemlerini beyan ederim. Açıkça onlar ortak API parçası olmadığını gösterir.

Gelecekte neler olabileceğini merak etmeyin.

Eğer uyguladığınız fonksiyonu sınıf özgüdür ve o sınıfın bağlamı dışında kullanılmamalıdır, o zaman miras için izin vermez. Biz bir hayvan hiyerarşi ve hayvanlardan birini olsaydı Örneğin, sadece, "layEggsInSand ()" gibi bir kaplumbağa söylemek onlar için çok benzersiz bir şey vardı. Bu nedenle herhangi bir başka hayvan tarafından miras olmamalıdır kaplumbağa (ne olursa olsun! Kaplumbağa,) için tamamen benzersiz olabilir. Bu bağlamda biz özel olduğunu söyleyebilirim. Fonksiyonu "yürüyüş ()" ise, diğer taraftan o benzersiz değil, bu nedenle kalıtsal olmalıdır.

O zaman şeylerin çoğu miras olmalı çünkü ilk başta oldukça bulanık görünüyor, ama onlar bu tür benzersiz konum olarak onlar miras olmamalıdır zaman nadir durumlar vardır.

Ben genellikle önlemek private. Benim akıl iki sınıf arasında bir miras ilişkisi ve özel üye varsa, o zaman ayrı bir nesne içine avret faktör gereken çok güçlü bir göstergesi olduğunu gider.

Dediğim gibi bir sınıf genişletmek için gidiyoruz eğer, daha sonra her zaman değiştirebilirsiniz.

Ama sen gerektiği miras kullanmayı önlemek eğer. Bu tasarımı yaparken eğer mümkünse, diğer desenleri kullanmak daha iyidir.

Temelde ne yapmak arayüzleri değil, uygulamaları miras ve program üzerinde iyilik bileşimidir.

Eğer izin verirseniz sınıfları sadece yerine onları birbirinden miras icar nesneleri kompozit için daha bir sıkıca tanımlanmış bir amacı var. Eğer arayüzleri kullanın ziyade çoğu likley küçük ve etkin arayüzleri belirleyecek miras. Sonra o miras azaltacaktır ve bu nedenle koruma ihtiyacı azaltmak göreceksiniz.

Örnek

interface sound {
 public function makeSound();
}

class bark implements sound{
 public function makeSound() {
   return "Bark!!!";  
 }
}

class mew implements sound{
 public function makeSound() {
   return "Mewmew!!!";  
 }
}

class forLeggedAnimal {
  private $sound;

  public function forLeggedAnimal($sound){
    $this->sound = $sound;
  }

  public function eat(){
    echo $this->sound->makeSound();
  }

}

$cat = new forLeggedAnimal(new mew());
$dog = new forLeggedAnimal(new bark());

Ben çok mükemmel bir örnek bu biliyorum. Ama bu tekniği göstermektedir ve birçok şekillerde kullanabilirsiniz. Örneğin siz kedi ve köpekler oluşturmak için farklı yaradılış desenleri ile birleştirebilirsiniz, bu bir kedi havlamaları veya mews olmadığını bilmek zorunda bu yüzden akıllıca olmayabilir .. Ama neyse .. bir temel sınıf yapmak zorunda ve sonra uzanan farklıdır "ses" yöntemi korumalı veya kamu geçersiz kılma yapmak zorunda bunun bir kedi ve bir köpek, ve onunla yöntemi yemek

/ Peter