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'; } }
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();
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;
//}
}
4. 클래스 상수(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);
위 내용은 PHP 추상 클래스, 인터페이스, 최종, 클래스 상수 고급 학습 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!