> 백엔드 개발 > PHP 튜토리얼 > PHP 객체지향 구문 5 최종 클래스, 추상 클래스, 인터페이스 구조(클래스 아님)

PHP 객체지향 구문 5 최종 클래스, 추상 클래스, 인터페이스 구조(클래스 아님)

黄舟
풀어 주다: 2023-03-04 11:54:01
원래의
1410명이 탐색했습니다.

클래스의 역할
1 객체 인스턴스화
2 다른 클래스의 기본 클래스로 상속받습니다!
3 정적 멤버 호출

두 가지 주요 기능: 객체 인스턴스화 및 상속.

하나의 기능을 가진 두 가지 특별한 클래스가 있습니다!
1, **는 객체를 인스턴스화만 할 수 있고 상속할 수 없습니다. **최종 클래스
2, 상속만 가능하고 객체를 인스턴스화할 수 없습니다. 추상 클래스

최종 클래스 및 최종 메서드
최종 클래스는 상속 체인의 마지막 링크입니다.

final class End{
}
class Test  extends End{
}
로그인 후 복사
运行结果:报错
PHP Fatal error: Class Test may not inherit from final class (End) in /usercode/file.php on line 7
로그인 후 복사

제한된 메서드는 가질 수 없습니다. 클래스 재작성

<?php
class  AmParent{
    final public function end_func(){
        echo &#39;我是final方法&#39;;
    }
}
class AmChild extends AmParent{
     public function end_func(){
        echo &#39;我是子类,我想重写final方法,可是报错了&#39;;
    }
}
로그인 후 복사
运行结果:报错
PHP Fatal error: Cannot override final method AmParentt::end_func() in /usercode/file.php on line 11
로그인 후 복사

추상 클래스, 추상 클래스
에는 일반 클래스(클래스 상수, 정적 속성, 정적 메서드, 비정적 속성, 비정적 메서드)보다 한 가지 더 있습니다. )—— 추상 메소드는 추상 메소드를 구현하기 위해 비추상 서브클래스가 필요합니다.
추상 메서드: {}가 없으면 메서드 전용 선언이라고 합니다. 매개변수를 가질 수 있습니다.

abstract public function abstract_func($arg1,$arg2)
로그인 후 복사
//不能实例化对象
<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
$amParent=new AmParent;
로그인 후 복사
运行结果:
PHP Fatal error: Cannot instantiate abstract class AmParent in /usercode/file.php on line 5
로그인 후 복사

상속의 두 가지 경우:
1. 하위 클래스는 추상 클래스가 아닙니다. 추상 클래스. 상위 클래스의 모든 추상 메서드를 구현해야 합니다(메서드 본문 {} 포함).

<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
class AmChild extends AmParent{
}
로그인 후 복사
오류가 보고되지 않은 경우:
运行结果,报错:
PHP Fatal error: Class AmChild contains 1 abstract method and must therefore be 
declared abstract or implement the remaining methods (AmParent::abstract_func) in /usercode/file.php on line 6
로그인 후 복사
1 추상 클래스를 추가하여 추상 클래스로 만들기


2 추상 메서드 구현
<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
abstract class AmChild extends AmParent{
}
로그인 후 복사

<?php
abstract class AmParent{
    abstract public function abstract_func($arg1,$arg2);
}
 class AmChild extends AmParent{
     public function abstract_func($arg1,$arg2){
        echo $arg1.$arg2;
         }
}
$amChild=new AmChild;
$amChild->abstract_func( &#39;have implemented &#39;,&#39; abstract_func &#39;);
로그인 후 복사
사용 의미
运行结果,报错:
have implemented abstract_func
로그인 후 복사
추상 클래스는 비추상 하위 클래스가 동일한 이름을 가진 메서드를 가져야 한다고 규정하지만 메서드 본문은 다를 수 있습니다.


<?php
abstract class Goods{
    abstract public function sayName();
}
 class Books extends  Goods{
     public function sayName(){
         echo &#39;我是一本书的名字<br/>&#39;;
     }
}
 class Mobiles extends  Goods{
     public function sayName(){
         echo &#39;我是一部手机的名字<br/>&#39;;
     }
}
$book1=new Books;
$book1->sayName();
$mobile1=new Mobiles;
$mobile1->sayName();
로그인 후 복사
인터페이스 구조:
运行结果:
我是一本书的名字
我是一部手机的名字
로그인 후 복사
는 클래스(객체)가 가져야 할 공용 메소드(인터페이스 메소드)를 제한하는 데 사용됩니다!


인터페이스에는 공용 추상 메서드(불완전한 메서드)와 상수만 포함될 수 있습니다!
<?php
    interface iGoods{
        const PAI=3.14;
        public function sayName();
        public function sayPrice();
    }
로그인 후 복사
구현

인터페이스 구조를 구현하는 클래스에는 인터페이스에 정의된 추상 메서드가 포함됩니다.
두 가지 옵션 중 하나는 추상 클래스로 정의하고, 두 번째는 인터페이스 메서드를 구현하는 것입니다!

//1定义成抽象类
abstract class Books implements iGoods{
    abstract  public function sayName();
    abstract  public function sayPrice();
}
로그인 후 복사
추상 클래스와 인터페이스의 차이점 비교:
//2实现接口方法
 class Books implements iGoods{
     public function sayName(){
         echo &#39;我实现了接口方法&#39;;
     }
     public function sayPrice(){
         echo &#39;我实现了接口方法&#39;;
     }
}
로그인 후 복사
1 추상 클래스와 일반 클래스 사이에는 상속 관계가 있습니다.

공통 클래스는 추상 클래스를 상속하며 먼저 다음을 얻을 수 있습니다. 추상 클래스
둘째, 추상 메소드를 구현해야 합니다(반드시 공개는 아님)
2. 인터페이스와 일반 클래스 간에 구현 관계가 있습니다!
일반 클래스가 인터페이스를 구현하는 경우 구현되지 않은 공용 메소드만 구현할 수 있습니다!
3. 인터페이스는 공개 메소드와 상수를 정의하는 데에만 사용됩니다! 그리고 추상 클래스에는 무엇이든 가질 수 있습니다!
4. 다중 인터페이스 구현. 클래스는 동시에 여러 인터페이스를 구현할 수 있습니다

팁:
<?php
interface iA{
        const PAI=3.14;
    public function sayA();
}
interface iB{
    public function sayB();
}
class C implements iA,iB{
    public function sayA(){
    }
    public function sayB(){
    }
}
로그인 후 복사
인터페이스는 클래스가 아니며, 인터페이스는 클래스의 구조를 제한하는 데 사용되는 독립적인 구조입니다!


//用class_exists(@param string),判断类是否存在
var_dump(class_exists(&#39;C&#39;));
var_dump(class_exists(&#39;iA&#39;));
로그인 후 복사
메소드 본문이나 추상 키워드 없이 공개 메소드와 상수로 가득 차 있습니다.
运行结果:
bool(true)
bool(false)
로그인 후 복사


위 내용은 PHP 객체지향 구문 5 최종 클래스, 추상 클래스, 인터페이스 구조(클래스 아님) 내용입니다. PHP 중국어 홈페이지(www.php .cn)!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿