Интиқоли усули аз нав таърифшуда дар ООП дар PHP
Вақте ки усул аз нав таъриф карда мешавад, фарзанд
ба усули аз нав таърифшудаи волидайн
дастрасиро гум мекунад. Аммо, бо ин ҳол
дастрасӣ ба он ҳанӯз ҳам мумкин аст. Ин
бо ёрии калимаи калидии parent
анҷом дода мешавад,
ки ба синфи волидайн ишора мекунад.
Биёед намунаеро дида бароем, вақте ки ба мо дастрасӣ ба усули волидайн лоzim мешавад. Бигзор мо синфи волидайнро ба таври зерин дошта бошем:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Бигзор мо дар синфи фарзанд усули волидайнро аз нав таъриф карда бошем:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Мушкилотеро дидан мумкин аст, ки дар усули аз нав таърифшуда дар вақти иҷрои шарт воқеан коди усули синфи волидайн иҷро мешавад. Ин боиси такрори нолозими код мегардад.
Метавонад аз он хал карда шавад, агар усули волидайнро даъват кард. Биёед инро иҷро кунем:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // усули волидайн
} else {
echo 'student name error';
}
}
}
?>
Коди зерин дода шудааст:
<?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';
}
}
}
?>
Дар синфи Employee ислоҳ кунед
сеттери синну солро содда кунед, бо истифодаи
усули асосии волидайн.