>백엔드 개발 >PHP 튜토리얼 >키워드 인터페이스에 대한 자세한 그래픽 설명 및 PHP 구현

키워드 인터페이스에 대한 자세한 그래픽 설명 및 PHP 구현

墨辰丷
墨辰丷원래의
2018-05-21 14:54:461600검색

PHP 클래스는 단일 상속입니다. 즉, 클래스가 여러 클래스의 기능을 요구하는 경우 상속은 무력합니다. 이러한 이유로 PHP는 클래스 인터페이스 기술을 도입합니다. 다음 기사에서는 PHP의 키워드 인터페이스 및 구현에 대한 관련 정보를 주로 소개합니다. 필요한 친구들이 함께 참고할 수 있습니다.

PHP 인터페이스

PHP 클래스는 단일 상속입니다. 즉, 클래스가 여러 클래스의 기능을 요구하는 경우 상속은 무력합니다. 이러한 이유로 PHP는 클래스 인터페이스 기술을 도입합니다. .

추상 클래스의 모든 메서드가 추상 메서드이고 변수가 선언되지 않고 인터페이스의 모든 멤버가 공용 권한을 갖는 경우 이 특수 추상 클래스를 인터페이스라고 합니다.

인터페이스는 인터페이스 키워드를 사용하여 정의되며, 키워드 Implements는 완전히 구현되어야 하는 인터페이스의 메서드를 구현하는 데 사용됩니다.

클래스에 인터페이스 적용

1. 키워드: 인터페이스

2. 키워드: 구현

1. 인터페이스 소개 및 생성

인터페이스: 모두 추상이거나 특수한 멤버 속성 상수에 대한 추상 클래스입니다.

규칙:

1. 클래스의 모든 메소드는 추상입니다.

2. 추상 메서드에는 추상을 추가할 필요가 없습니다.

3. 인터페이스의 추상 메소드 속성은 공개입니다.

4. 멤버 속성은 상수여야 합니다.

형식 코드는 다음과 같습니다.

interface demo { 
const NAME = "常量对象属性"; 
function fun1(); 
function fun2(); //抽象方法。 
}

2. 인터페이스의 응용 프로그램 및 사양

인터페이스 참조는 클래스 상속 키워드 확장과 다릅니다. 반면 인터페이스는 키워드 구현을 사용할 수 있습니다. 여러 인용문을 사용하고 쉼표로 구분하세요

1. 형식: 공통 클래스 참조 인터페이스

class MyPc implements demo , demo2 , demo3 { 
... 
}

2. 형식: 추상 클래스 응용 프로그램 인터페이스 예시

abstract class MyPc implements demo , demo2 , demo3 { 
... 
}

3. coexist

class MyPc extends Root implements demo , demo2 , demo3 { 
... 
}

먼저 상속한 다음 인터페이스, 단일 상속 다중 인터페이스.

4. 형식: 인터페이스와 인터페이스의 상속

interface demo3 extends demo { 
... 
}

예제 코드는 다음과 같습니다.

<?php 
interface demo { 
 const NAME = "名称"; 
 function fun1(); 
 function fun2(); 
} 
interface demo2 { 
 function fun3(); 
 function fun4(); 
} 
interface demo3 { 
 const TEST = "Test"; 
 function fun5(); 
} 
class MyPc implements demo, demo2 { 
 function fun1() { 
 echo "++++++++++<br />"; 
 } 
 function fun2() { 
 echo "----------<br />"; 
 } 
 function fun3() { 
 echo "1111111111<br />"; 
 } 
 function fun4() { 
 echo "2222222222<br />"; 
 } 
} 
class MyPs extends MyPc implements demo3 { 
 function fun5() { 
 echo "继承类后引用接口"; 
 } 
} 
$p = new MyPs; 
$p->fun1(); 
$p->fun2(); 
$p->fun3(); 
$p->fun4(); 
$p->fun5(); 
?>

예를 들어 인터페이스는 키워드 인터페이스를 사용하여 정의되고 키워드 구현은 다음과 같습니다. 인터페이스 메소드를 구현하는 데 사용되며 완전히 구현되어야 합니다.

예제 코드는 다음과 같습니다.

<?php 
//定义接口 
interface User{ 
 function getDiscount(); 
 function getUserType(); 
} 
//VIP用户 接口实现 
class VipUser implements User{ 
 // VIP 用户折扣系数 
 private $discount = 0.8; 
 function getDiscount() { 
  return $this->discount; 
 } 
 function getUserType() { 
  return "VIP用户"; 
 } 
} 
class Goods{ 
 var $price = 100; 
 var $vc; 
 //定义 User 接口类型参数,这时并不知道是什么用户 
 function run(User $vc){ 
  $this->vc = $vc; 
  $discount = $this->vc->getDiscount(); 
 $usertype = $this->vc->getUserType(); 
  echo $usertype."商品价格:".$this->price*$discount; 
 } 
} 
$display = new Goods(); 
$display ->run(new VipUser); //可以是更多其他用户类型 
?>

예제를 실행하면 출력은 다음과 같습니다.

VIP 사용자 제품 가격: 80위안

이 예는 PHP 인터페이스의 간단한 응용 프로그램을 보여줍니다. 이 예에서 User 인터페이스는 사용자 할인을 구현하고 VipUser 클래스는 특정 할인 계수를 구현합니다. 마지막으로 상품 카테고리 상품은 사용자 인터페이스를 기반으로 다양한 사용자 견적을 구현합니다.

이 예는 PHP 인터페이스의 사용법을 보여주는 것으로 제한되며 과학적 성격을 포함하지 않습니다.

다중 인터페이스 구현

PHP는 클래스를 상속할 때 동시에 여러 인터페이스를 구현할 수도 있습니다.

class 子类 extends 父类 implemtns 接口1, 接口2, ... 
{ 
 ...... 
}

추상 클래스와 인터페이스의 차이점

인터페이스는 특별한 추상 클래스입니다. 모델의 스펙이라고 볼 수 있습니다. 인터페이스와 추상 클래스의 일반적인 차이점은 다음과 같습니다.

1. 하위 클래스가 인터페이스를 구현하는 경우(필요 여부에 관계없이) 인터페이스의 모든 메서드를 구현해야 합니다. 필요한 메소드를 구현합니다.

2. 인터페이스에 정의된 메서드 이름이 변경되면 이 인터페이스를 구현하는 모든 하위 클래스는 메서드 이름을 동기적으로 업데이트해야 하며, 추상 클래스의 메서드 이름이 변경되면 해당 하위 클래스의 메서드 이름은 업데이트되지 않습니다. 영향을 받습니다. (이전 메서드 구현과 관련하여) 새로운 메서드가 됩니다.

3. 추상 클래스는 단독으로만 상속될 수 있습니다. 하위 클래스가 여러 상위 클래스에서 상속되어야 하는 기능을 구현해야 하는 경우 인터페이스를 사용해야 합니다.

<?php
//简单定义实现接口
interface UserInterface{ //定义user接口
 function getname();
}
interface TeacherInterface{ //定义teacher接口
 function getLengthofService();
}
class User implements UserInterface{ //实现user接口
 private $name="nostop";
 public function getName(){
  return $this->name;
 }
}
class Teacher implements TeacherInterface{ //实现teacher接口
 private $age=23;
 public function getLengthofService(){
  return $this->age;
 }
}
$user=new User();
echo $user->getName().&#39;<br />&#39;;//nostop
$teacher=new Teacher();
echo $teacher->getLengthofService().&#39;<br />&#39;;//23
//继承类实现接口
class GraduResultudent extends User implements TeacherInterface{ //继承User类 实现接口
 private $teacher;
 public function __construct(){  //定义构造函数
  $this->teacher=new Teacher(); //实例化Teacher对象
 }
 public function getLengthOfService(){ //实现TeacherInterface接口的方法
  return $this->teacher->getLengthOfService();
 }
}

class Result{
 public static function getUserName(UserInterface $_user){ //注意:这里面的类型变成接口类型
  echo "Name is ".$_user->getName().&#39;<br />&#39;;
 }
 public static function getLengthOfService(TeacherInterface $_teacher){ //注意:这里面的类型变成接口类型
  echo "age is ".$_teacher->getLengthOfService();
 }
}

$object=new GraduResultudent();
Result::getUserName($object); //Name is nostop
Result::getLengthOfService($object); //age is 23
echo "<br />";
//接口实现用户的折扣
interface People{ //定义接口
 function getUserType();
 function getCount();
}

class VipUser implements People{ //实现接口
 //用户折卡系数
 private $discount=0.8;
 function getUserType(){
  return "VIP用户";
 }
 function getCount(){
  return $this->discount;  
 }
}

$vip=new VipUser(); //实现化对象
echo $vip->getUserType().&#39;商品价格:&#39;.$vip->getCount()*100; //VIP用户商品价格:80

class Goods{
 var $price=100;
 var $member;
 function run(People $member){ //注意:这里面的参数类型是接口类型
  $this->member=$member;
  $discount=$this->member->getCount();
  $usertype=$this->member->getUserType();
  echo $usertype."商品价格:".$this->price*$discount;
 }
}
$display=new Goods();
$display->run(new VipUser);//VIP用户商品价格:80

?>

관련 권장 사항:

php

에서

implements 사용에 대한 자세한 예 php implements 자세한 사용 지침

php

에서 implements

사용 지침

위 내용은 키워드 인터페이스에 대한 자세한 그래픽 설명 및 PHP 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.