Ben bir özelliği ayarlamak için bir sınıf içinde bir ayarlayıcı kullanmalı mıyım?

4 Cevap

Benim sınıf içinde bir özellik değerini ayarlamak istiyorum. Ben bir ayarlayıcı ve bir alıcı olmadan bunu yapabilir ama bu yaklaşım, "doğru" yolu bilmek istiyorum. Bu bir oturum açma komut için çok özellik ve pasör hem de özel olmasıdır.

Ben sadece doğrudan özelliğini ayarlamak veya bir ayarlayıcı ve bir alıcı kullanmalı mıyım?

4 Cevap

This is probably mainly a matter of personnal preference...

Eğer sınıfının bir yöntemi özel özelliğini ayarlamak için varsa, ben doğrudan bu özelliği erişebilirsiniz söyleyebilirim.

Bazı koşul veya hesaplama veri özelliği ayarlandığında her zaman yapılmış olduğundan emin olmak istiyorsanız bir ayarlayıcı / getter kullanmak için bir nedeni, durum bu tür olurdu.


As a sidenote : of course, if your want to access your private property from outside the class, you'll have to use to public setter/getter -- but it doesn't seem to be what you are trying to do here.

Bu görüş meselesidir. Geleneksel nesne yönelimli programlama prensipleri Yes söylüyorlar, ama bu size kalmış gerçekten.

Eğer private için özelliğini ayarlarsanız, bir ayarlayıcı yöntemi kullanmak zorunda olduğunu unutmayın. Diğer sınıflar ve yöntemler mülkiyet üzerinde çalışabilir, böylece belirleyiciler her zaman, kamu olmalıdır. Eğer olsa sınıfın dışından özelliğine erişmek için herhangi bir nedeniniz yoksa bu gerçekten önemli değil, çünkü o, bir ayarlayıcı yaratmak değil; Her zaman sınıf içinde özel üye değişkenleri / özelliklerine erişebilirsiniz.

Eğer her şey için alıcı ve ayarlayıcıları oluşturmak zorunda kalmadan __ get / __ set yöntemleri "büyü" kullanabilirsiniz unutmayın.

magic functions

edit: üye değişkenler özel veya korunan iseniz bir alıcı ve ayarlayıcı kullanmak zorunda olacak. Kamu ise, bu tarz bir meselesi - sizin sınıfın geri kalanı ile tutarlı olmalıdır bile.

Setter / Alıcılar türetilmiş sınıfları daha kolay geliştirmek / nesnenin durumunu ve davranışını / limitini değiştirmek için izin verir. Ama onlar biraz can sıkıcı olmaya ardından belirleyiciler / alıcılar aşırı yapabiliriz ve. (Özellikle bunları gizlemek istemiyorum dilde).

class Foo {
  protected $x;
  public function __construct($x) {
    $this->setX($x);
  }

  public function setX($x) {
    $this->x = $x;
  }

  public function something($y) {
    // not using a getter here, it's only an example
    echo $this->x * $y;
  }
}

class DoubleFoo extends Foo {
  public function setX($x) {
    parent::setX($x*2);
  }
}

$df = new DoubleFoo(1);
$df->something(5);