PHP5에서 멀티태스킹을 실현하는 두 가지 방법의 실례 공유
PHP5에서 메소드 매개변수의 유형 프롬프트에 멀티태스킹이 적용되는 위치만 설명할 수 있습니다.하나의 클래스의 모든 하위 클래스 대상은 현재 유형을 유형 힌트로 하는 유형 요구를 충족시킬 수 있습니다.이 인터페이스를 실현하는 모든 종류는 인터페이스 유형을 유형으로 제시하는 방법의 매개 변수 요구를 충족시킬 수 있다.간단하게 말하면, 하나의 종류는 부류와 이미 실현된 인터페이스의 신분을 가지고 있다.
인터페이스 실현을 통해 다태적 실현
 
  
interface User{ // User   
  
    public function  getName(); 
  
    public function setName($_name); 
  
} 
  
 
  
class NormalUser implements User { //       . 
  
    private $name; 
  
    public function getName(){ 
  
        return $this->name; 
  
    } 
  
    public function setName($_name){ 
  
        $this->name = $_name; 
  
    } 
  
} 
  
 
  
class UserAdmin{ //  . 
  
    public static function  ChangeUserName(User $_user,$_userName){ 
  
        $_user->setName($_userName); 
  
    } 
  
} 
  
 
  
$normalUser = new NormalUser(); 
  
UserAdmin::ChangeUserName($normalUser,"Tom");//       NormalUser   . 
  
echo $normalUser->getName(); 
  
?> 
  
 
 인터페이스와 조합을 사용하여 다중 계승 시뮬레이션
조합을 통해 다중 계승을 시뮬레이션하다.
PHP에서는 다중 계승을 지원하지 않습니다. 만약 우리가 여러 종류의 방법을 사용하여 코드를 다시 사용하는 데 어떤 방법이 있습니까?
바로 조합이다.한 클래스에서 다른 클래스를 속성으로 설정합니다.
아래의 예는 다중 계승을 모의하였다.
인터페이스 인스턴스
개념적인 예를 하나 쓰다.우리는 온라인 판매 시스템을 설계했는데 사용자 부분은 다음과 같다. 사용자를NormalUser,VipUser,InnerUser 세 종류로 나눈다.사용자의 할인에 따라 사용자가 구매한 제품의 가격을 계산할 것을 요구한다.향후 확장과 유지보수를 위한 공간을 요구합니다.
 
  
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("    "); 
  
$user = new NormalUser("tom"); 
  
$price = Productsettle::finalPrice($user, $book, $number); 
  
$str = "  ,   " . $user->getName() . "
"; 
  
$str .= "     " . $user->getGrade() . "
"; 
  
$str .= "     " . $user->getDiscount() . "
"; 
  
$str .= "     " . $price; 
  
echo $str; 
  
?> 
  
 
 이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.