>  기사  >  백엔드 개발  >  PHP 추상 클래스, 인터페이스, 최종, 클래스 상수 고급 학습 튜토리얼

PHP 추상 클래스, 인터페이스, 최종, 클래스 상수 고급 학습 튜토리얼

伊谢尔伦
伊谢尔伦원래의
2017-06-29 09:22:481083검색

PHP 객체 지향 고급 학습, 주로 추상 클래스, 인터페이스, 최종 및 클래스 상수에 대한 일부 정보 포함

1 추상 클래스(추상)
실제 개발 과정에서 일부 클래스는 필요하지 않습니다. 예를 들어, 앞서 학습한 일부 상위 클래스는 주로 하위 클래스에 의해 상속되므로 코드 재사용성이 향상됩니다. 구문 구조:

abstract class 类名{ 
属性 $name; 
方法(){} //方法也可以为abstract 修饰符 function 方法名(){} 
}

예:

abstract class animal{ 
public $name; 
public $age; 
//抽象方法不能有方法体,主要是为了让子类去实现; 
abstract public function cry(); 
//
抽象类
中可以包含抽象方法,同时也可以包含实例类方法 
public function getname(){ 
echo $this->name; 
} 
} 
class Cat{ 
public function cry(){ 
echo 'ok'; 
} 
}

이해: Animal 클래스는 실제로 몇 가지 공통 속성을 규정하는 추상 개념입니다. 일부 동물의 행동과 유사하지만 실제로는 그러한 속성과 행동 자체가 없습니다. 또 다른 예: 차량, 식물 등

참고:

1. 클래스가 추상으로 수정되면 클래스는 추상 클래스입니다. 메서드 본문을 가질 수 없습니다. => 추상 함수 cry(); 심지어 {}
2. 추상 클래스는 추상 메서드가 필요하지 않지만 클래스에 추상 메서드가 포함된 경우 이 클래스는 다음과 같이 선언되어야 합니다.
3. 클래스가 다른 추상 클래스를 상속하는 경우 하위 클래스는 해당 클래스 자체가 추상 클래스로 선언되지 않은 한 모든 추상 메서드를 구현해야 합니다. 구현되지 않은 일부 메서드를 함께 캡슐화합니다. 특정 클래스에서 이러한 메서드를 사용해야 하는 경우 특정 상황에 따라 이러한 메서드를 작성합니다.
문법 구조
인터페이스 인터페이스 이름 {
/ /속성, 메서드 //인터페이스의 메서드는 메서드 본문을 가질 수 없습니다. ;
}
인터페이스 구현 방법
클래스 클래스 이름은 인터페이스 이름 {

}을 구현합니다.
이해: 인터페이스는 보다 추상적인 추상 클래스이며, 추상 클래스의 메서드에는 메서드 본문이 있을 수 있지만 인터페이스의 메서드에는 메서드 본문이 있어서는 안 됩니다. 인터페이스는 프로그래밍의 다형성과 높은 응집력 및 낮은 결합도를 실현합니다.

예:

//接口是定义规范、属性的,一般以小写的i开头; 
interface iUsb{ 
public function start(); 
public function stop(); 
} 
//编写相机类,让它去实现接口 
//当一个类实现了某个接口,那么该类就必须实现接口的所有方法 
class Camera implements iUsb{ 
public function start(){ 
echo 'Camera Start Work'; 
} 
public function stop(){ 
echo 'Camera Stop Work'; 
} 
} 
//编写一个手机类 
class Phone implements iUsb{ 
public function start(){ 
echo 'Phone Satrt Work'; 
} 
public function stop(){ 
echo 'Phone Stop Work'; 
} 
} 
$c=new Camera(); 
$c->start(); 
$p=new Phone(); 
$p->start();

인터페이스 사용 시기:
1. 사양을 설정하고 다른 프로그래머가 이를 구현하도록 합니다
2. 특정 기능을 구현하지만 구현 방법이 다릅니다.

요약:

1. 인터페이스를 인스턴스화할 수 없으며 인터페이스의 모든 메서드는 본문을 가질 수 없습니다.

2. ,) 클래스 데모는 if1,if2,if3{}을 구현합니다.
3. 인터페이스는 속성을 가질 수 있지만 상수여야 합니다. 상수는 수정자를 가질 수 없습니다(기본값은 공개 수정자) ​​
예: 인터페이스 iUsb{
const A= 90;
}
echo iUsb::A;
4. 인터페이스의 모든 메소드는 공개여야 하며 기본값은 공개입니다.
5. 인터페이스는 다른 클래스를 상속할 수 없지만
다른
인터페이스를 상속할 수 있습니다. 여러 다른 인터페이스를 상속할 수 있습니다
예: 인터페이스 인터페이스 이름
extends
if1,if2{}
6. 클래스는 상위 클래스를 상속하면서 다른 인터페이스를 상속할 수 있습니다.예: 클래스 테스트 확장 testbase 구현 test1, test2{}
인터페이스 구현 VS 클래스 상속PHP의 상속은 단일 상속입니다. 즉, 클래스는 하나의 상위 클래스만 상속할 수 있으며 이는 하위 클래스 기능 확장에 특정 영향을 미칩니다. 인터페이스 구현은 상속된 클래스를 보완하는 것으로 볼 수 있습니다. 상속은 계층적 관계이며 그다지 유연하지 않은 반면, 인터페이스 구현은 수평적 관계입니다. 인터페이스를 구현하면 매우 유연한 상속 관계를 깨지 않고 특정 기능을 확장할 수 있습니다.

3. Final


1. 클래스가 다른 클래스에 의해 상속되지 않도록 하려면(예: 보안상의 이유로) final
구문 사용을 고려할 수 있습니다.
final 클래스 A{} 2. 메소드가 하위 클래스에 의해 재정의되지 않도록 하려면 final을 사용하여 수정하는 것을 고려할 수 있습니다. 메소드의 상속 권한은 공개 수정에 따라 달라지기 때문에 여전히 상속될 수 있습니다.

class A{ 
final public function getrate($salary){ 
return $salary*0.08; 
} 
} 
class B extens A{ 
//这里父类的getrate方法使用了final,所以这里无法再重写getrate 
//public function getrate($salary){ 
// return $salary*0.01; 
//} 
}
3. Final은 사용할 수 없습니다. 수정된 속성


4. 클래스 상수(const)

경우에 따라 다음과 같은 요구 사항이 있을 수 있습니다. 멤버 변수를 수정하지 않고 고정할 변수의 값을 수정하려면 const 상수를 사용할 수 있습니다. (const 이름은 모두 대문자여야 하며 $ 기호가 없어야 하며 상수는 수정할 수 없습니다.)

구문:
const 상수 이름 = 상수 값 //초기값; 상수는 수정할 수 없기 때문에 값을 할당해야 합니다
Call : 클래스 이름::상수 이름 [self::상수 이름은 이 클래스 내에서 사용 가능] 또는 인터페이스 이름::상수 이름 //인터페이스에서는 상수만 사용할 수 있습니다. 변수는 사용할 수 없습니다
예:

class A{ 
const TAX_RATE=0.08; 
function paytax($salary){ 
return $salary*self::TAX_RATE; 
} 
} 
$a=new A(); 
echo $a->paytax(100);

참고:
1. 상수는 하위 클래스에서 상속될 수 있습니다
2. 상수는 객체가 아닌 특정 클래스에 속합니다.

위 내용은 PHP 추상 클래스, 인터페이스, 최종, 클래스 상수 고급 학습 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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