Garip şey, bir setter var, ama mülkiyet public terk olmasıdır. (Oluyor hiçbir __get sihir var varsayarsak.)
Genellikle fazla bir özellik atanabilir ne üzerinde kontrol ve ne yapamam almak için alıcılar / ayarlayıcıları kullanmak istiyorum. Veya, mülkiyet erişilen veya değiştirildiğinde kod çalıştırmak isteyebilirsiniz. Her iki durumda da, aksi takdirde oldukça anlamsız, mülkiyet private veya protected yaparak alıcılar / belirleyiciler kullanılmasını zorlamak gerekir. Kendinizi ya da kendi ayak çekmenizi sınıfı kullanır başkalarına önleyerek ilgili.
Sizin örnekte pasör sadece başka bir şey yapmadan değerini ayarlar, bu gereksiz bulunuyor. Bu değer ayarlanır zaman gereklidir başka bir şey yapar eğer pasör kullanmadan değerini değiştirmek mümkün olduğundan, sizin sınıf tasarımında bir kusur var.
class Foo {
public $bar = 0; // is only allowed to contain numeric values
public function setBar($val) {
if (is_numeric($val)) {
$this->bar = $val;
}
}
}
$obj = new Foo();
$obj->bar = 'some value'; // set a string, which is not allowed
Eğer yapmak isterseniz $bar protected, bu mümkün olmazdı.