Sobes.tech
Middle

Əgər sinifdə ictimai xüsusiyyət varsa, bu, sinifin dəyişməz olduğunu göstərirmi?

sobes.tech Süni İntellekt

AI-dan cavab

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 private və ya protected olmalı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şmə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; // Dışarıdan 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ə)