Eienskappe in OOP in PHP

Soos jy reeds weet, kan jy in PHP nie van verskeie klasse gelyktydig erf nie, slegs van een. Ons het vroeër reeds die oplossing vir hierdie probleem behandel: in plaas van oorerwing, gebruik voorwerpe van een klasse binne ander.

In PHP is daar 'n ander manier. Dit behels die gebruik van eienskappe. 'n Eienskap verteenwoordig 'n stel eienskappe en metodes wat by 'n ander klas ingesluit kan word. Die eienskappe en metodes van die eienskap sal deur die klas beskou word asof dit sy eie is.

Die sintaksis van 'n eienskap is dieselfde as dié van 'n klas, behalwe dat die naam van die eienskap gedeclareer moet word met die sleutelwoord trait.

Jy kan nie 'n instansie van 'n eienskap skep nie - eienskappe is slegs bedoel om by ander klasse gekoppel te word. Die koppeling self word uitgevoer met die opdrag use, waarna met 'n spasie die naam van die eienskap wat gekoppel word, aangedui word. Hierdie opdrag word aan die begin van die klas geskryf.

Kom ons kyk na die toepassing van eienskappe in 'n praktiese voorbeeld. Gestel ons het die volgende eienskap Helper, wat die private eienskappe name en age bevat, sowel as hul getters:

Helper.php<?php
  trait Helper
  {
    private $name;
    private $age;
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Gestel ons het ook die volgende klas User, in wie se konstruktor die eienskappe name en age gestel word:

User.php<?php
  class User
  {
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
  }
?>

Kom ons voeg nou getters vir die eienskappe van ons klas User by. Maar laat ons dit nie in die klas self skryf nie, en bloot die eienskap Helper koppel, waarin hierdie metodes reeds geïmplementeer is:

User.php<?php
  class User
  {
    use Helper; // koppel die eienskap
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
  }
?>

Na die koppeling van die eienskap sal die metodes en eienskappe van daardie eienskap in ons klas verskyn. Ons sal na hulle verwys asof dit die metodes en eienskappe van die klas self is:

index.php<?php
  $user = new User('john', 30);
  echo $user->getName(); // sal 'john' uitvoer
  echo $user->getAge();  // sal 30 uitvoer
?>
Задание 1

Implementeer die klas City met die eienskappe name, age, population en getters daarvoor. Laat ons klas vir die verkorting van sy kode die reeds geskepde eienskap Helper gebruik.