Mîrasiya di PHP OOP de

Di PHP de Guherkerên Gihîştinê
Berdewam di PHP OOP

Mîras çi ye?

Dema ku çînek ji çînek din tê, ew wekî mîras tê zanîn. Li vir çend şertên girîng hene ku bi mîrasê di PHP-ê de têkildar in.

  • Çîna Dêûbavan – Ji çîna ku çînên din jê çêdibin jê re çîna dêûbav tê gotin. Ew wekî çîna bingehîn jî tê zanîn.
  • Çîna Zarok – Ji çîna ku ji çîneke din dertê, jê re pola zarok tê gotin. Hin navên wê yên din jî hene wekî çîna pelan an çîna derhatî.
Mîrasiya di PHP de

Meriv çawa di PHP de dersek mîras digire?

A class dikare bi bikaranîna mîras dirêj dike keyword. Li mînaka jêrîn binêrin.

<?php
class Fruit {
    protected $name;
    protected $color;

    public function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }

    public function getName() {
        return $this->name;
    }

    public function getColor() {
        return $this->color;
    }
}

class Apple extends Fruit {
    protected $variety;

    public function __construct($name, $color, $variety) {
        parent::__construct($name, $color);
        $this->variety = $variety;
    }

    public function getVariety() {
        return $this->variety;
    }
}

$apple = new Apple('Apple', 'Red', 'Fuji');
echo $apple->getName(); // Output: Apple
echo $apple->getColor(); // Output: Red
echo $apple->getVariety(); // Output: Fuji
?>

Di vê nimûneyê de, çîna Apple dirêj dike pola Fruit, ku tê vê wateyê ku pola Apple ji bilî yên xwe, hemî taybetmendî û rêbazên çîna Fêkî dihewîne. Çêkera pola Apple fonksiyona dêûbav:: construct() bikar tîne da ku gazî çêkerê dêûbav bike, pîvanên guncan peyda dike. Dûv re, bi karanîna mîrasiyê, hûn dikarin mînakek pola Apple biafirînin û fonksiyonê ji çîna dêûbav bigihînin.

Ji bo kurteya jorîn:

  1. Mîrasî dihêle ku pola zarok bigihîje __avakirina giştî, rêbaz û taybetmendiyên çîna dêûbav.
  2. Di mînaka jorîn de, em dikarin bi karanîna objeya wê, û hem jî rêbazên çîna dêûbav bigihîjin rêbaza pola apple.

Qada guhêrbarên gihîştina parastî di Mîrasiyê de

Di dersa berê de, em fêr bûn ku taybetmendiyên/rêbazên parastî yên çînekê di hundurê polê de û çînên ku jê têne peyda kirin.

Ji bo têgihîştina çarçoveya guhêrbarên gihîştina parastî di mîrasiyê de, em li mînaka jêrîn binêrin.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am $this->name and my color is $this->color";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one?";
  }
}

$apple = new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

Di mînaka jorîn de:

  • Em çînek bi navê fêkî çêdikin ku xwediyê hin taybetmendiyên gelemperî û fonksiyonek parastî ye.
  • Em çînek din ava dikin, sêv, ku ji Fêkîyê dirêj dibe û mînaka xwe heye.
  • Dema ku em hewl didin ku bi karanîna objeya pola sêvê bigihîjin rêbaza parastî ya çîna Fruit, ew xeletiyê dide ji ber ku, em hewl didin ku xwe bigihînin endama parastî ya çîna Fruit li derveyî çîna derhatî.

Ka em li mînakek din binêrin, ku bi rastî guhertoyek piçûk a paşîn e.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "Am I a fruit or an apple? ";
    $this -> intro(); // protected
  }
}

$apple = new Apple("Apple", "red");
$strawberry->message();
?>

Ji ber ku em di mînaka pêşîn de di nav pola wê de digihîjin, rêbaza parastî ya çîna Fruit di pola apple de heye.

Di mîrasê de serdest

Binpêkirin tê wateya ji nû ve pênasekirina rêbazên çîna dêûbavê di polên zarokê yên bi heman navî de. Nimûneya mîrasê ya jêrîn binêrin.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "I am {$this->name}, my color is {$this->color}. Also, my weight is {$this->weight} kg.";
  }
}

$apple= new Apple("Apple", "red", 50);
$apple->intro();
?>

Di mînaka jorîn de:

  • Overriding tê wateya guherandina navên rêbazên çîna dêûbav di polên zarokan de. Mînaka jêrîn ya serdestkirina mîrasê binihêrin.
  • Hêjayî gotinê ye ku rêbazên __avakirin û danasînê di sêva pola zarokan de heman navî ne. Lêbelê, parametre dikarin cûda bibin.
  • Em mînakek pola apple diafirînin û argumanan dişînin rêbaza avakirinê.
  • Ji ber ku me mînaka objeya sêvê bi karanîna çêkerê pola sêvê çêkir, dema ku em rêbaza danasînê bi karanîna mînakek sêvê vedibêjin, ew gazî fonksiyona danasîna çîna sêvê dike.

Rola Keyword Dawî di mîrasiyê de

Peyva sereke ya dawîn qedexe dike ku pola zarok/derketî li ser fonksiyona dêûbav/çîna bingehîn bigire. Li mînaka jêrîn binêrin ku hûn bibînin ka peyva paşîn çawa tê bikar anîn.

<?php
class Fruit {
  final public function intro() {
    // code
  }
}

class Apple extends Fruit {
// error to override the intro
  public function intro() {
    // code
  }
}
?>

Sinifa apple hewl dide ku di mînaka pêşîn de rêbaza danasînê derbas bike. Ew ê xeletiyek bavêje ji ber ku me peyva paşîn bi fonksiyona danasîna çîna Fruit bikar anî.

Heke hûn dixwazin li ser mîrasiya PHP-ê bêtir bixwînin wê hingê em jêrîn pêşniyar dikin rêberê fermî.

Q & A

Pirs: Di PHP OOP de, mîras çi ye?
A: Di PHP OOP de, mîras pergalek e ku destûrê dide çînek nû ku taybetmendî û rêbazên çînek berê mîras bigire. Ev tê vê wateyê ku çîna nû dikare kod û fonksiyona çîna dêûbav ji nû ve bikar bîne û di heman demê de taybetmendî û rêbazên xwe yên nû jî zêde bike.

Pirs: Di PHP de, hûn çînek ku ji çînek din mîras digire çawa pênase dikin?
A: Di PHP-ê de, peyva sereke "dirêj dike" ji bo danasîna pola ku ji çînek din mîras digire tê bikar anîn. Mînakî, heke we pola dêûbav "ParentClass" heye û hûn dixwazin pola zarokan a "ChildClass" ya ku jê mîras digire ava bikin, hûn dikarin binivîsin:

class ChildClass extends ParentClass {
  // properties and methods
}

Pirs: Di PHP de, gelo çînek dikare ji gelek çînan mîras bigire?
A: Na, di PHP de, çînek tenê dikare ji çînek din mîras bigire. Lêbelê, navber dikarin werin bikar anîn da ku fonksiyonek wekhev peyda bikin, û çînek dikare gelek navbeynkaran bicîh bîne.

Pirs: Ma gengaz e ku meriv di pola zarokê de rêbazek derbas bike?
A: Erê, hûn dikarin rêbazek di pola zarokan de bi afirandina rêbazek bi heman navî bişopînin. Dema ku li ser objeyek pola zarokan were gazî kirin, dê li şûna rêbaza pola dêûbav rêbaza pola zarokan were bikar anîn.

Pirs: Ma gengaz e ku meriv rêbazek pola dêûbav ji pola zarokan vexwend?
A: Erê, hûn dikarin peyva sereke ya "dêûbav" bikar bînin û li dû operatora çareseriya çarçovê (::) û navê rêbazê bikar bînin da ku hûn rêbazek pola dêûbav ji pola zarokan bang bikin. Wek nimûne:

class ChildClass extends ParentClass {
  public function childMethod() {
    parent::parentMethod();
  }
}

temrîn:

  1. Peyva sereke ya ku di PHP-ê de tê bikar anîn çi ye ku destnîşan dike ku çînek ji çînek din mîras digire?
  2. Hûn çawa dikarin xwe bigihînin rêbazek an milkê ji pola dê û bav di pola zarok?
  3. Meriv çawa dikare çêkerê çîna dêûbav di nav çêkerê pola zarok de bi nav bike?
  4. Meriv çawa dikare rê li rê bigire ku rêgezek an taybetmendiyek di pola zarokan de were paşguh kirin?
  5. Cûdahiya di navbera çi ye extends û implements peyvên sereke di PHP de?

Answers:

  1. Ew extends peyva sereke di PHP-ê de tê bikar anîn da ku destnîşan bike ku çînek ji çînek din mîras digire.
  2. Hûn dikarin ji çîna dêûbavê di pola zarok de bi karanîna rêbazek an taybetmendiyek xwe bigihînin parent:: keyword, li pey rêbaz an navê milkê.
  3. Hûn dikarin çêkerê çîna dêûbav di nav çêkera pola zarok de bi karanîna ve-yê bang bikin parent::__construct() awa.
  4. Hûn dikarin bi karanîna rêgezek an taybetmendiyek di pola zarokê de nehêlin ku were paşguh kirin final keyword berî rêbazê an danezana milkê di pola dê û bav.
  5. Ew extends keyword tê bikaranîn ku nîşan bide ku çînek ji çînek din mîras digire, dema ku ya implements peyva sereke tê bikar anîn ku nîşan bide ku çînek navgînek bicîh dike.
Di PHP de Guherkerên Gihîştinê
Berdewam di PHP OOP
en English
X
Scroll to Top