Pārrakstītas metodes izsaukšana OOP PHP
Pārrakstot, pēctecis zaudē
piekļuvi pārrakstītajai metodei
vecāka. Tomēr, piekļūt tai
joprojām ir iespējams. Tas tiek darīts
izmantojot atslēgvārdu parent,
kas norāda uz vecāka klasi.
Apskatīsim piemēru, kad mums varētu būt nepieciešama piekļuve vecāka metodei. Pieņemsim, ka mums ir šāda vecāka klase:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Pieņemsim, ka mēs pēcteča klasē pārrakstījām vecāka metodi:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Var pamanīt, ka pārrakstītajā metodē, izpildot nosacījumu, faktiski tiek izpildīts vecāka metodes kods. Izrādās nevajadzīgs koda dublējums.
No tā var atbrīvoties, ja izsauc vecāka metodi. Darīsim to:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // vecāka metode
} else {
echo 'student name error';
}
}
}
?>
Dots šāds kods:
<?php
class User {
private $age;
public function setAge($age) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
}
}
class Employee extends User {
public function setAge($age) {
if ($age <= 120) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
} else {
echo 'need age less 120';
}
}
}
?>
Klasē Employee izlabojiet
vienkāršojiet vecuma setteri, izmantojot
oriģinālo vecāka metodi.