Nesneler her zaman geçerli bir state olmalıdır. Bu nesne, her zaman (yöntemlerini) davranır ve bilgi (üye değişkenler) mantıklı olduğu içerdiği anlamına gelir. Bir kurucu amacı geçerli bir durumda nesne yaratmak için olduğunu.
Değer nesnelerin dikkate alınarak, yapıcı nesne mantıklı şekilde argümanlar az sayıda almalıdır. Bir RGB değeri nesne olsaydı kırmızı dize "maymun" ise Örneğin, bu uygulama mantıklı olur, yeşil NULL idi, ve mavi bir dizi oldu?
final class RGB {
$r, $g, $b;
}
$mycolor = new RGB;
// NULL, what value of red is that supposed to be?
var_dump($mycolor->r);
// We are free to set these values too, even though they do not make sense.
$mycolor->r = 'monkey';
$mycolor->g = NULL;
$mycolor->b = array('foo', 'bar');
İşte bu nesne olmasını sağlar tam olarak ne olduğunu. $ MyColor geçerli bir durumda değil bir nesneye başvurur. Nasıl bir RGB nesnesi her üç değer, kırmızı, mavi ve yeşil vardır ve bunlar, 0 ile 255 arasındaki tüm sayılar olduğundan emin olabilirim?
final class RGB {
private $r;
private $g;
private $b;
public function __construct($r, $g, $b) {
// are our arguments numbers?
if (!is_numeric($r)) {
throw new Exception('Value of red must be a number');
}
if (!is_numeric($g)) {
throw new Exception('Value of green must be a number');
}
if (!is_numeric($b)) {
throw new Exception('Value of blue must be a number');
}
// are our arguments within range 0-255?
if ($r < 0 || $r > 255) {
throw new Exception('Value of red must be 0-255');
}
if ($g < 0 || $g > 255) {
throw new Exception('Value of green must be 0-255');
}
if ($b < 0 || $b > 255) {
throw new Exception('Value of blue must be 0-255');
}
// our arguments are fine.
$this->r = $r;
$this->g = $g;
$this->b = $b;
}
//*// Canadian support
public function getColour() {
return $this->getColor();
}
public function getColor() {
return array($this->r, $this->g, $this->b);
}
}
$mycolor = new RGB; // error! missing three arguments
$mycolor->r = 'monkey'; // error! this field is private
// exception! the constructor complains about our values not being numbers
$mycolor2 = new RGB('monkey', NULL, array('foo', 'bar'));
// exception! the constructor complains our numbers are not in range
$mycolor3 = new RGB(300, 256, -10);
$mycolor4 = new RGB(255, 0, 0); // ahh... a nice shade of red
var_dump($mycolor4->getColor()); // we can read it out later when we need to
Lütfen yapıcı üç argüman gerektirir ve tüm üç 0 ile 255 arasında sayılardır sürece bir istisna atar, her zaman iyi değerler ile üye değişkenleri tanımlama olacaktır.
Ayrıca, kırmızı, mavi, yeşil ve üye değişkenler özel olduğundan emin olmalısınız. Aksi halde, kimse onlara istedikleri her şeyi yazabilirsiniz. Tabii ki, onlar özel, hiçbir kimse ya da onları okuyabilir. Bir salt okunur operasyonu oluşturmak için bizim için özel üye değişkenleri erişir getColor () yöntemini tanımlayabilirsiniz.
RGB nesnenin Bu sürümü her zaman geçerli bir devlet olacaktır.
Umarım bu OOP doğası üzerine biraz ışık tutuyor ve size gelen düşünmeye başlamak için bir yer verir.