Middle
Agar sinfda jamoat mulkiyati bo'lsa, bu sinf immutabl bo'ladimi?
sobes.tech AI
AIdan javob
Yox.
İctimai mülkiyyət sinifdə, bu mülkiyyətin dəyərinin obyekt xaricindən dəyişdirilə biləcəyini göstərir. Dəyişilməz obyekt, vəziyyəti (mülkiyyətlərinin dəyərləri) yaradıldıqdan sonra dəyişdirilə bilməyən obyektə deyilir. İctimai mülkiyyətin mövcudluğu dəyişilməzlik prinsipinə ziddir.
Dəyişilməzliyi əldə etmək üçün, sinif aşağıdakı şərtlərə cavab verməlidir:
- Bütün mülkiyyətlər
privatevə yaprotectedolmalıdır. - Setterlər (mülkiyyət dəyərlərini dəyişən metodlar) olmamalıdır.
- Sinifin asılılıqları (işlətdiyi obyektlər) da dəyişilməz olmalı və ya onların vəziyyəti xaricdən dəyişdirilməməlidir.
- Konstruktor obyektin tamamilə başlanğıcını təmin etməli və yaradıldıqdan sonra dəyişdirilməməlidir.
- Əgər dəyişikliklər tələb olunursa, yeni dəyərlərlə yeni nümunələr yaradılmalıdır.
İctimai mülkiyyətə sahib nümunə (dəyişən) sinif:
<?php
class MutableObject
{
public $value; // İctimai mülkiyyət
public function __construct($value)
{
$this->value = $value;
}
}
$obj = new MutableObject(10);
echo $obj->value; // 10
$obj->value = 20; // Xaricdən dəyişdirildi
echo $obj->value; // 20
Dəyişilməz sinifin nümunəsi:
<?php
class ImmutableObject
{
private $value; // Özəl mülkiyyət
public function __construct($value)
{
$this->value = $value;
}
public function getValue() : int
{
return $this->value;
}
// "Dəyişiklik" üçün metod, əslində yeni obyekt yaradır
public function withValue(int $newValue) : self
{
return new self($newValue);
}
}
$obj1 = new ImmutableObject(10);
echo $obj1->getValue(); // 10
// $obj1->value = 20; // Xəta: Özəl mülkiyyətə daxil olmaq mümkün deyil
$obj2 = $obj1->withValue(20); // Yeni obyekt yaradılır
echo $obj1->getValue(); // 10 (orijinal obyekt dəyişməyib)
echo $obj2->getValue(); // 20 (yeni obyekt dəyişdirilmiş dəyərlə)