Home  >  Article  >  Backend Development  >  PHP uses interfaces and combinations to simulate multiple inheritance_PHP tutorial

PHP uses interfaces and combinations to simulate multiple inheritance_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:31:52941browse

Simulate multiple inheritance through composition.

Multiple inheritance is not supported in PHP. If we want to use the methods of multiple classes to achieve code reuse, is there any way?

That is combination. In one class, set another class as a property.

The following example simulates multiple inheritance.

Interface Example

Write a conceptual example. We design an online sales system, and the user part is designed as follows: Users are divided into three types: NormalUser, VipUser, and InnerUser. It is required to calculate the price of the product purchased by the user based on the user's different discounts. And require space to be reserved for future expansion and maintenance.

The code is as follows:
interface User
{
public function getName();
public function setName($_name);
public function getDiscount();
}
abstract class AbstractUser implements User
{
private $name = "";
protected $discount = 0;
protected $grade = "";
function __construct($_name) {
$this->setName($_name);
}
function getName() {
return $this->name;
}
function setName($_name) {
$this->name = $_name;
}
function getDiscount() {
return $this->discount;
}
function getGrade() {
return $this->grade;
}
}
class NormalUser extends AbstractUser
{
protected $discount = 1.0;
protected $grade = "Normal";
}
class VipUser extends AbstractUser
{
protected $discount = 0.8;
protected $grade = "VipUser";
}
class InnerUser extends AbstractUser
{
protected $discount = 0.7;
protected $grade = "InnerUser";
}
interface Product
{
function getProductName();
function getProductPrice();
}
interface Book extends Product
{
function getAuthor();
}
class BookOnline implements Book
{
private $ productName;
protected $productPrice;
protected $Author;
function __construct($_bookName) {
$this->productName = $_bookName;
}
function getProductName() {
return $this->productName;
}
function getProductPrice() {
$this->productPrice = 100;
return $this->productPrice;
}
public function getAuthor() {
$this->Author = "chenfei";
return $this->Author;
}
}
class Productsettle
{
public static function finalPrice(User $_user, Product $_product, $number) {
$price = $_user->getDiscount() * $_product->getProductPrice() * $number;
return $price;
}
}
$number = 10;
$book = new BookOnline("Design Mode");
$user = new NormalUser("tom") ;
$price = Productsettle::finalPrice($user, $book, $number);
$str = "Hello, dear" . $user->getName() . "
" ;
$str .= "Your level is" . $user->getGrade() . "
";
$str .= "Your discount is" . $user->getDiscount () . "
";
$str .= "Your price is" . $price;
echo $str;
?>


www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/760151.htmlTechArticleSimulate multiple inheritance through composition. Multiple inheritance is not supported in PHP. If we want to use the methods of multiple classes to achieve code reuse, is there any way? That is combination. In a class go...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn