合成を通じて多重継承をシミュレートします。
PHP では多重継承はサポートされていません。コードを再利用するために複数のクラスのメソッドを使用したい場合、何か方法はありますか?
それは組み合わせです。あるクラスで、別のクラスをプロパティとして設定します。
次の例は、多重継承をシミュレートします。
インターフェースの例
概念的な例を書きます。 私たちはオンライン販売システムを設計していますが、ユーザー部分は次のように設計されています。ユーザーはNormalUser、VipUser、InnerUserの3種類に分類されます。ユーザーが購入した製品の価格は、ユーザーのさまざまな割引に基づいて計算する必要があります。また、将来の拡張やメンテナンスのためにスペースを確保しておく必要があります。
コードは次のとおりです:
interface User
{
public function getName();
public function setName($_name);
public function getDiscount();
}
abstract class AbstractUserimplements 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();
}
インターフェース Book extends Product
{
function getAuthor();
}
class BookOnline 実装 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("デザイン モード");
$user = new NormalUser("tom");
$price = Productssettle::finalPrice($user, $book , $number );
$str = "こんにちは" . $user->getName() . "
";
$str .= "あなたのレベルは" . $user->getGrade() . ";
$str .= "あなたの割引は" . $user->getDiscount() . "
";
$str .= "あなたの価格は" . $price;
echo $str;
?> ;