PHP – What are Abstract Classes and Methods? #
PHP – Хураангуй хичээл, арга гэж юу вэ? #
Abstract classes and methods are when the parent class has a named method, but need its child class(es) to fill out the tasks.
Хийсвэр анги ба аргууд нь эцэг эхийн нэртэй аргатай боловч даалгаврыг бөглөхөд түүний хүүхдийн анги (анги) шаардлагатай байх явдал юм.
An abstract class is a class that contains at least one abstract method. An abstract method is a method that is declared, but not implemented in the code.
Хийсвэр анги нь дор хаяж нэг хийсвэр аргыг агуулсан анги юм. Хийсвэр арга бол тунхаглагдсан боловч кодонд хэрэгжүүлээгүй аргыг хэлнэ.
An abstract class or method is defined with the abstract
keyword:
Хийсвэр анги эсвэл аргыг хийсвэр гэсэн түлхүүр үгээр тодорхойлно.
Syntax #
<?php
abstract class ParentClass {
abstract public function someMethod1();
abstract public function someMethod2($name, $color);
abstract public function someMethod3() : string;
}
?>
When inheriting from an abstract class, the child class method must be defined with the same name, and the same or a less restricted access modifier. So, if the abstract method is defined as protected, the child class method must be defined as either protected or public, but not private. Also, the type and number of required arguments must be the same. However, the child classes may have optional arguments in addition.
Хийсвэр ангиас өв залгамжлахдаа ендер ангиллын аргыг ижил нэртэй, ижил буюу бага хязгаарлагдмал хандалтын өөрчлөгчөөр тодорхойлсон байх ёстой. Тэгэхээр, хийсвэр аргыг хамгаалалттай гэж тодорхойлсон бол хүүхдийн ангийн аргыг хамгаалагдсан эсвэл нийтийн гэж тодорхойлсон байх ёстой, гэхдээ хувийн биш. Түүнчлэн шаардлагатай аргументийн төрөл, тоо ижил байх ёстой. Гэсэн хэдий ч хүүхдийн ангиуд нэмэлтээр нэмэлт маргаантай байж болно.
So, when a child class is inherited from an abstract class, we have the following rules:
Тиймээс, хүүхдийн анги хийсвэр ангиас өвлөгдөхөд бид дараах дүрмийг баримтална:
- The child class method must be defined with the same name and it redeclares the parent abstract method
Хүүхдийн ангийн аргыг ижил нэртэй тодорхойлсон байх ёстой бөгөөд энэ нь эцэг эхийн хийсвэр аргыг дахин зарлаж өгдөг
- The child class method must be defined with the same or a less restricted access modifier
Хүүхдийн ангийн аргыг ижил эсвэл арай бага хязгаарлагдмал хандалтын өөрчлөгчөөр тодорхойлсон байх ёстой
- The number of required arguments must be the same. However, the child class may have optional arguments in addition
Шаардлагатай аргументуудын тоо ижил байх ёстой. Гэсэн хэдий ч хүүхдийн анги дээр нэмэлтээр нэмэлт маргаан байж болно
Let’s look at an example:
Нэг жишээг авч үзье:
<?php
// Parent class
abstract class Car {
public $name;
public function __construct($name) {
$this->name = $name;
}
abstract public function intro() : string;
}
// Child classes
class Audi extends Car {
public function intro() : string {
return "Choose German quality! I'm an $this->name!";
}
}
class Volvo extends Car {
public function intro() : string {
return "Proud to be Swedish! I'm a $this->name!";
}
}
class Citroen extends Car {
public function intro() : string {
return "French extravagance! I'm a $this->name!";
}
}
// Create objects from the child classes
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";
$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";
$citroen = new citroen("Citroen");
echo $citroen->intro();
?>
Example Explained #
Тайлбарласан Жишээ #
The Audi, Volvo, and Citroen classes are inherited from the Car class. This means that the Audi, Volvo, and Citroen classes can use the public $name property as well as the public __construct() method from the Car class because of inheritance.
Audi, Volvo, Citroen ангиуд нь Car ангиас удамшдаг. Энэ нь Audi, Volvo, Citroen ангиуд нь өв залгамжлалын улмаас public $ name өмчөөс гадна Car ангиллын public __construct () аргыг ашиглаж болно гэсэн үг юм.
But, intro() is an abstract method that should be defined in all the child classes and they should return a string.
Гэхдээ intro () нь бүх хүүхдийн ангиудад тодорхойлогдох хийсвэр арга бөгөөд тэд мөрийг буцааж өгөх ёстой.
PHP – More Abstract Class Examples #
Let’s look at another example where the abstract method has an argument:
Хийсвэр аргаар аргументтай өөр нэг жишээг авч үзье.
<?php
abstract class ParentClass {
// Abstract method with an argument
abstract protected function prefixName($name);
}
class ChildClass extends ParentClass {
public function prefixName($name) {
if ($name == "John Doe") {
$prefix = "Mr.";
} elseif ($name == "Jane Doe") {
$prefix = "Mrs.";
} else {
$prefix = "";
}
return "{$prefix} {$name}";
}
}
$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>
Let’s look at another example where the abstract method has an argument, and the child class has two optional arguments that are not defined in the parent’s abstract method:
Хийсвэр арга нь аргументтэй байдаг ба хүүхдийн анги нь эцэг эхийн хийсвэрлэх аргад тодорхойлогдоогүй хоёр нэмэлт аргумент байдаг өөр нэг жишээг авч үзье.
<?php
abstract class ParentClass {
// Abstract method with an argument
abstract protected function prefixName($name);
}
class ChildClass extends ParentClass {
// The child class may define optional arguments that are not in the parent's abstract method
public function prefixName($name, $separator = ".", $greet = "Dear") {
if ($name == "John Doe") {
$prefix = "Mr";
} elseif ($name == "Jane Doe") {
$prefix = "Mrs";
} else {
$prefix = "";
}
return "{$greet} {$prefix}{$separator} {$name}";
}
}
$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");