>  기사  >  백엔드 개발  >  PHP의 객체지향에 대한 나의 이해에 대한 자세한 설명

PHP의 객체지향에 대한 나의 이해에 대한 자세한 설명

零下一度
零下一度원래의
2017-07-03 09:33:481506검색

머리말:

오늘은 PHP의 객체지향적 특성을 소개하겠습니다. 객체지향이라고 하면 프로세스지향을 언급해야겠습니다. 왜냐하면 제가 초보자였을 때는 차이점을 구분하지 못하는 경우가 많았기 때문입니다. 그렇다면 객체 지향과 프로세스 지향의 차이점은 무엇입니까? 간단히 소개하겠습니다.

객체 지향어떤 객체가 문제를 처리하는지에 집중하세요.

가장 큰 특징은 속성과 함수를 갖는 클래스로 구성되어 있으며, 해당 클래스에서 객체를 얻어 문제를 해결할 수 있다는 점입니다.

프로세스 중심문제 해결 과정에 집중하세요. 이 문제를 하나씩 해결하기 위해 일련의 프로세스를 사용한다는 것이 가장 큰 특징입니다.

객체지향과 프로세스지향의 차이점을 이해한 후, 객체지향 PHP의 기본 지식을 배워보겠습니다.

***이 장의 키워드: 객체 지향 기본, 캡슐화 및 상속, PHP 키워드, 싱글톤, 객체 직렬화 및 매직 메소드, 추상 클래스 및 추상 메소드, 인터페이스 및 다형성.

우리가 알아야 할 PHP 객체지향의 세 가지 주요 특징은 상속;

1. 객체지향의 기본

객체 지향

1. 클래스란 무엇인가요?
동일한 속성(특성)과 방법(행동)을 가진 일련의 개체 집합입니다. 클래스는 추상적인 개념입니다.

2. 객체란 무엇인가요?
클래스에서 얻은 특정 속성 값을 가진 개체를 객체라고 합니다. 대상은 특정 개인입니다.
예: 인간; 장산

3. 클래스와 객체의 관계는 무엇인가요?
클래스는 객체의 추상화입니다! 객체는 클래스의 구체화입니다!
클래스는 이 유형의 객체가 어떤 속성을 가지고 있는지 나타낼 뿐이며 특정 값을 가질 수 없으므로 클래스는 추상적입니다.
객체는 클래스의 모든 속성을 할당한 후 생성되는 특정 개체입니다.

2. 클래스 선언 및 인스턴스화
1. 클래스 선언 방법:
클래스 클래스 이름 {
액세스 수정자 $property[=기본값];
[액세스 수정자 ] 함수 메서드 (){}
}

2. 클래스 선언 시 주의 사항:
①클래스 이름은 영숫자와 밑줄로만 구성할 수 있으며, 숫자로 시작할 수 없으며 큰 낙타 표기법을 준수해야 합니다. rule;
②클래스 이름은 클래스로 수정해야 하며, 클래스 이름 뒤에 ()가 있으면 안 됩니다.
③속성은 반드시 접근 수정자가 있어야 하며, 메소드에는 접근 수정자가 없어도 됩니다.

3. 인스턴스화된 객체 및 객체 속성 메서드 호출:
$object name = new class name(); //()는

클래스 외부에서 속성 및 메서드 호출:
$Object name-> $Attribute name; //->를 사용하여 속성을 호출하는 경우 속성 이름에는 $ 기호

호출 속성 및 메소드가 포함될 수 없습니다.
$this -> $속성명;

3. 생성자
1. 생성자란?
생성자는 클래스의 특수 함수입니다. new 키워드를 사용하여 객체를 인스턴스화하는 것은 클래스의 생성자를 호출하는 것과 같습니다.

2. 생성자의 기능은 무엇인가요?
객체를 인스턴스화할 때 자동으로 호출되어 객체의 속성에 초기값을 할당하는 데 사용됩니다!

3. 생성자 작성 방법:
①생성자 이름은 클래스와 동일해야 합니다.
[public] function Person($name){
$this -> ;
}
②매직 메소드 사용 __construct
[public] function __construct($name){
$this -> name = $name;
}
4. :
①첫 번째 작성 방법은 생성자 이름과 클래스 이름이 동일해야 합니다! ! ! !
②클래스에 직접 작성한 생성자가 없으면 시스템에는 기본적으로 null 매개 변수 생성자가 있으므로 new Person()을 사용할 수 있습니다.
매개 변수가 있는 생성자를 작성하면 더 이상 null이 없습니다. 매개변수 생성, 즉 new Person()은 직접 사용할 수 없습니다.
Person은 생성자의 요구 사항을 충족해야 합니다. ! ! !
③두 생성자가 동시에 존재하는 경우 __construct가 사용됩니다.

5. 소멸자: __destruct():
① 소멸자는 객체가 파괴되고 해제되기 전에 자동으로 호출됩니다.
② 소멸자는 어떤 매개 변수도 사용할 수 없습니다. 개체가 사용된 후에는 리소스 등을 닫습니다.
6. 마법의 방법:

PHP는 __로 시작하는 일련의 함수를 제공합니다. 이러한 함수는 수동으로 호출할 필요가 없습니다.
이러한 유형의 함수는 자동으로 호출됩니다. 매직을 매직 기능이라고 합니다.
예: 새 객체가 생성될 때 __construct(){} 함수가 자동으로 호출됩니다.
객체가 삭제될 때 __destruct(){} 함수가 자동으로 호출됩니다.
매직 메서드 외에도 다음이 필요합니다. 사용자 정의 함수 및 메소드는 __로 시작할 수 없습니다.
마지막으로 일반적으로 더 복잡한 기능을 가진 클래스의 경우 별도의 클래스 파일에 작성합니다.

클래스 파일 이름은 "클래스 이름 소문자.class.php" 방식을 사용하여 동일한 소문자로 지정합니다.
이 클래스를 다른 파일에서 사용할 때 include를 사용하여 이 ".class.php" 파일을 가져올 수 있습니다.

1. 포장이란?
액세스 제어를 달성하기 위해 외부 액세스가 필요하지 않은 클래스의 속성과 메서드를 액세스 한정자를 사용하여 사유화하세요.

*참고: 접근을 거부하는 것이 아니라 접근 제어를 구현하기 위한 것입니다. 즉, 속성을 사유화한 후, 우리가 제공하는 방법을 통해 사용자가 속성을 처리할 수 있도록 해당 방법을 제공해야 합니다.

2. 캡슐화의 역할은 무엇인가요?
① 사용자는 클래스가 제공할 수 있는 기능에만 관심이 있고, 기능 구현의 세부적인 내용에는 관심이 없습니다! (Encapsulation 방식)
② 사용자 데이터 제어, 불법 데이터 설정 방지, 사용자에게 반환되는 데이터 제어 (속성 encapsulation + set/get 방식)

3. encapsulation 연산을 구현하나요?
①메소드 캡슐화
클래스 내부에서만 사용되며 외부 사용을 위해 제공되지 않는 일부 메소드의 경우 프라이빗을 사용하여 해당 메소드를 사유화할 수 있습니다.
private function formatName(){} //이 메서드는 클래스 내부에서 $this를 통해서만 호출할 수 있습니다
function showName(){
$this -> formatName();
}
②속성 캡슐화 + set/get 메서드
속성 설정 및 읽기를 제어하기 위해 속성을 사유화할 수 있으며 사용자는 우리가 제공하는 set/get 메서드를 통해 속성을 설정해야 합니다
private $age;
function setAge($age){
$this->age=$age;
}
function getAge(){
return $this->age;
}
$Object->getAge();
$Object->setAge(12);

3속성 캡슐화 + 매직 메소드
private $age;
function __get($key ) {
return $this->$key;
}
function __set($key,$value){
$this->$key=$value;
}
$Object->age; //객체의 전용 속성에 액세스하면 __get() 매직 메서드가 자동으로 호출되고 액세스된 속성 이름이 __get() 메서드에 전달됩니다. ;age= 12; //객체의 비공개 속성을 설정할 때 자동으로 __set() 매직 메서드를 호출하고 설정된 속성 이름과 속성 값을
메서드에 전달합니다. 방법을 사용하면 분기 구조를 사용하고 $key의 차이를 확인하고 다양한 작업을 수행할 수 있습니다.

4. 캡슐화의 마법 메소드 정보:
①__set($key,$value): 호출 시 두 개의 매개변수(필요한 속성 이름)를 메소드에 전달합니다. 설정할 속성 값입니다.
②__get($key,$value): 클래스의 비공개 속성을 읽을 때 자동으로 호출됩니다. 호출 시 읽어야 하는 속성의 이름인 매개변수를 메소드에 전달합니다. ): 외부에서 isset()을 사용합니다. 함수가 개인 속성을 감지하면 자동으로 호출됩니다.
>>> 기본적으로 감지되지 않는 개인 속성을 감지하려면 클래스 외부에서 isset();을 사용하세요. false
>>>그래서 자동 호출 시 내부 감지 결과를 반환하는 __isset(); 함수를 사용할 수 있습니다.
function __isset($key){
return isset($this -> $key);
}
isset($object name->private property)을 외부적으로 사용할 때 결과는 다음과 같습니다. 위의 __isset()에 의해 반환된 것은 자동으로 호출됩니다!
4__unset($key): 비공개 속성을 삭제하기 위해 unset() 함수를 외부에서 사용할 때 자동으로 호출됩니다.

function __unset($key){
unset($this -> $key);
}
unset($object name->private attribute);을 사용하여 외부에서 속성을 삭제하면 속성 이름이 자동으로 __unset()에 전달되어 처리를 위해 이 매직 메서드로 전달됩니다.

【상속의 기본 지식】


1. 상속을 어떻게 구현하나요?
하위 클래스가 상위 클래스를 상속하도록 하려면 하위 클래스에 확장 키워드를 사용하세요.
class Student는 Person을 확장합니다.{}
2. 상속 구현 시 주의할 점은 무엇인가요?

①하위 클래스는 상위 클래스의 비공개 속성만 상속할 수 있습니다.
②하위 클래스가 상위 클래스를 상속받은 후에는 상위 클래스의 속성과 메서드를 하위 클래스에 복사하는 것과 동일하며 $this를 사용하여 직접 호출할 수 있습니다.
3PHP는 단일 상속만 지원할 수 있으며 여러 클래스를 상속하는 하나의 클래스를 지원하지 않습니다. 그러나 클래스에는 여러 수준의 상속이 있습니다.
class Person{}
class Adult 확장 Person{}
class Student 확장 Adult{}
//Student 클래스에는 Adult 클래스와 Person 클래스의 특성과 메서드가 모두 있습니다
3 , 메소드 덮어쓰기(메소드 재작성)

조건 1: 하위 클래스가 상위 클래스를 상속함
조건 2: 하위 클래스가 상위 클래스의 기존 메소드를 다시 작성
위의 두 조건을 충족하면 호출됩니다. 방법 적용 범위. 재정의 후 하위 클래스가 메서드를 호출하면 하위 클래스의 자체 메서드가 호출됩니다.

마찬가지로 메서드 재정의 외에도 하위 클래스에는 특성 재정의에 대한 상위 클래스와 동일한 이름의 특성이 있을 수 있습니다.
하위 클래스가 상위 클래스 메서드를 재정의하는 경우 하위 클래스에서 동일한 이름을 가진 상위 클래스 메서드를 호출하는 방법은 무엇입니까?

partent::method name();

따라서 하위 클래스가 상위 클래스를 상속하는 경우 하위 클래스 생성의 첫 번째 단계에서 복사를 위해 상위 클래스 생성자를 호출해야 합니다.
function __construct($name,$sex,$school){

partent::__construct($name,$sex);
$this ->

2. 캡슐화 및 상속
3. PHP 키워드

1.final
①최종 수정 클래스, 이 클래스는 최종 클래스이므로 상속할 수 없습니다!
②최종 수정 방법, 이 방법은 최종 방법이므로 재정의할 수 없습니다!
③final은 속성을 수정할 수 없습니다.

2. static
① 정적 속성과 정적 메서드라고 하는 속성과 메서드를 수정할 수 있으며, 클래스 속성과 클래스 메서드라고도 합니다.
② 정적 속성과 정적 메서드는 클래스 이름만 사용할 수 있습니다. 직접 전화하세요.
"클래스 이름::$정적 속성", "클래스 이름::정적 메서드()"
Person::$sex; Person::say();
3정적 속성 및 메서드를 사용하세요. 클래스는 로드될 때 객체가 생성되기 전에 선언됩니다.
4정적 메서드에서는 비정적 속성이나 메서드를 호출할 수 없습니다.
비정적 메서드에서는 정적 속성과 메서드를 호출할 수 있습니다.
(클래스가 로드될 때 정적 속성과 메서드가 생성되었고, 비정적 속성 메서드는 아직 인스턴스화되지 않았기 때문입니다.)
⑤ 클래스에서는 self 키워드를 사용하여 클래스 이름을 참조할 수 있습니다. .
class Person{
static $sex = "nan";
function say(){
echo self::$sex;
}
}
⑥ 정적 속성은 다음과 같습니다. Shared 즉, new에 의해 생성된 많은 객체도 동일한 속성을 공유합니다.

3.const 키워드:
define() 함수가 아닌 클래스에 상수를 선언하세요! const 키워드를 사용해야 합니다.
define() 문과 유사하게 const 키워드는 상수를 선언하는 데 사용할 수 없으며 모두 대문자로 사용해야 합니다!
상수는 한번 선언되면 변경할 수 없습니다. 호출할 때 정적과 마찬가지로 클래스 이름을 사용하여 Person::constant를 호출합니다.

4.instanceof 연산자:
객체가 특정 클래스의 인스턴스인지 감지합니다. (아버지, 할아버지, 증조부 포함...)
$zhangsan instanceof Person;

[간단히 요약] 여러 특수 연산자
1. ""만 연결할 수 있습니다. 2. => 배열을 선언할 때 관련 키와 값 ["key"=>"value"]
3. -> 멤버 메소드;
4, ::
① 상위 클래스에서 동일한 이름의 메소드를 호출하려면 parent 키워드를 사용하십시오. parent::say()
② 클래스 이름(및 self)을 사용하십시오. 속성 클래스, 정적 메서드 및 상수에서 정적 메서드를 호출합니다.

싱글턴 패턴을 모노모픽 패턴이라고도 합니다.
클래스는 하나의 객체 인스턴스만 가질 수 있음이 보장됩니다.

구현 포인트:
① 생성자는 비공개이며 new 키워드를 사용하여 객체를 생성하는 것은 허용되지 않습니다.
② 객체를 얻기 위한 외부 메소드를 제공하고, 메소드에서 객체가 비어 있는지 확인합니다.
비어 있으면 객체를 생성하고 반환하고, 비어 있지 않으면 직접 반환합니다.
③인스턴스 객체의 속성과 객체를 획득하는 방법은 정적이어야 합니다.
4이후에는 우리가 제공하는 정적 메소드를 통해서만 객체를 생성할 수 있습니다.
eg:$s1 = Singleton::getSingle();

4. 싱글턴
5.객체 직렬화 및 매직 메서드

***키워드: clone 및 __clone, __antoload(), 직렬화 및 역직렬화(직렬화 및 역직렬화), 유형 제약 조건, 매직 메서드 요약(12)


1 Clone 및 __clone
1. . 객체를 다른 객체에 할당하기 위해 =를 사용할 때 실제로 할당되는 것은 객체의 주소입니다.
두 개체가 동일한 주소를 가리키므로 한 개체가 변경되면 다른 개체도 변경됩니다.
예: $lisi = $zhangsan;
2. 한 객체를 다른 객체로 완전히 복제하려면 두 객체가 독립적이며 서로 간섭하지 않습니다.
복제를 사용해야 합니다. 키워드 ;
eg: $lisi = clone $zhangsan; //두 객체는 ​​서로 간섭하지 않습니다
3.__clone():
① clone 키워드를 사용하여 객체를 복제할 때 clone 함수는 다음과 같습니다. 자동으로 호출됩니다.
②__clone() 함수는 복제할 때 사용되는 생성자와 유사하며 새로 복제된 객체에 초기 값을 할당할 수 있습니다.
3 __clone() 함수의 $this는 새로 복제된 객체를 참조합니다.
일부 버전에서는 $that을 사용하여 복제된 객체를 참조할 수 있지만 대부분의 버전에서는 이를 지원하지 않습니다.
4. __toString()
echo 및 기타 출력 문을 사용하여 객체를 직접 인쇄하는 경우 echo $zhangsan;
을 호출한 다음 __toString() 함수에서 반환되는 문자열을 지정할 수 있습니다. __toString( ){
return "haha";
}
echo $zhangsan; //결과는 다음과 같습니다. haha
5, __call()

class 를 사용하면 __call() 메서드가 자동으로 실행됩니다.
자동으로 실행되면 두 개의 매개변수가 __call() 메소드에 전달됩니다.
매개변수 1: 호출할 메소드의 이름
매개변수 2: 호출 메소드의 (배열) 매개변수 목록.
2.__antoload()

① 이것은 클래스에서 사용되지 않는 유일한 매직 메소드입니다.
② 존재하지 않는 클래스가 인스턴스화되면 이 매직 메소드가 자동으로 호출됩니다. ③Call 하면 매개변수가 자동으로 __autoload()에 전달됩니다: 인스턴스화된 클래스 이름
따라서 이 메서드를 사용하여 자동으로 파일을 로드하는 기능을 구현할 수 있습니다.
function __autoload($className){
include "class/".strtolower($className).".class.php";
}
$zhangsan=new Person();//this 파일에 Person 클래스가 없으면 __autoload()가 자동으로 실행되어 person.class.php 파일을 로드합니다

3. 직렬화 및 역직렬화(Serialization and Deserialization)
1. 직렬화: 일련의 작업을 통해 객체를 문자열로 변환하는 과정을 직렬화라고 합니다. 상태 설명)
2. 직렬화 해제: 직렬화된 문자열을 객체로 변환하는 과정을 직렬화 해제라고 합니다.
3.
①객체를 네트워크를 통해 전송해야 하는 경우
② 객체를 파일이나 데이터베이스에 유지해야 하는 경우
4 직렬화 및 역직렬화 구현 방법
Serialization: $ str=serialize($zhangsan) ;
Deserialization: $duixiang=unserialize($str);
5, __sleep() 매직 메서드:
①객체 직렬화를 실행하면 자동으로 __sleep() 함수가 실행됩니다.
②__sleep() 함수는 배열을 반환해야 합니다. 배열에 없는 속성은 직렬화할 수 없습니다.
function __sleep (){
return array("name"," age"); //이름/나이 두 가지 속성만 직렬화할 수 있습니다.
}
6.__wakeup() 매직 메소드

①객체를 deserialize할 때 __wakeup() 메소드가 자동으로 호출됩니다.
②자동으로 호출되면 생성된 새 객체를 deserialize하는 데 사용됩니다. 속성이 재할당됩니다.
function __wakeup(){
$this -> name = "lee思";
}
4. 유형 제약

1. 유형 제약: 변수 추가를 의미합니다. type은 해당 데이터 유형만 저장하도록 이 변수를 제한하는 데 사용됩니다.
(이 작업은 강력한 형식의 언어에서 일반적입니다. PHP에서는 배열 및 개체의 형식 제약 조건만 구현할 수 있습니다.)
2 형식 제약 조건이 특정 클래스인 경우 이 클래스와 이 클래스의 하위 클래스 개체입니다. , 통과할 수 있습니다.
3. PHP에서는 형식 제약 조건이 함수의 형식 매개 변수에서만 발생할 수 있습니다.
class Person{}
class Student 확장 Person{}
function func(Person $p){ //제약 함수의 형식 매개변수, Person 클래스와 Person 하위 클래스만 허용
echo "1111" ;
echo $p -> name;
}
func(new Person()) √
func(new Student()) √
func("111");
은 new Person() 형식이며, 이를 "익명 개체"라고 부릅니다.

※※※기본 클래스: 상위 클래스

※※※파생 클래스: 하위 클래스

5. 매직 메소드 요약
1. __construct(): 생성자, 객체가 새로 생성되면 자동으로 호출됩니다.
2.__destruct(): 객체가 파괴될 때 자동으로 호출되는 소멸자입니다.
3.__get(): 클래스의 개인 속성에 액세스할 때 자동으로 호출됩니다. 읽기 속성 이름을 전달하고 $this->속성 이름을 반환합니다
4. __set(): 클래스의 비공개 속성에 값을 할당할 때 자동으로 호출됩니다. 설정해야 하는 속성 이름과 속성 값을 전달합니다.
5. __isset(): 객체의 비공개 속성을 감지하기 위해 isset()을 사용할 때 자동으로 호출됩니다. 감지된 속성 이름을 전달하고 isset($this -> 속성 이름)을 반환합니다.
6. __unset(): 객체의 비공개 속성을 삭제하기 위해 unset()을 사용할 때 자동으로 호출됩니다. 삭제된 속성 이름을 전달하고
7 메소드에서 unset($this -> 속성 이름)을 실행합니다. __toString(): 객체를 인쇄하기 위해 echo를 사용할 때 자동으로 호출됩니다. 객체를 인쇄할 때 표시하려는 콘텐츠를 반환합니다. 반환은 문자열이어야 합니다.
8. __call(): 클래스에서 정의되지 않거나 공개되지 않은 메서드를 호출할 때 자동으로 호출됩니다. 호출된 함수 이름과 매개변수 목록 배열을 전달합니다.
9. __clone(): clone 키워드를 사용하여 객체를 복제할 때 자동으로 호출됩니다. 이 함수는 새로 복제된 객체에 값을 초기화하고 할당하는 것입니다. __sleep(): 객체가 직렬화될 때 자동으로 호출됩니다. 배열을 반환하며, 배열의 값은 직렬화될 수 있는 속성입니다. __wakeup(): 객체가 역직렬화될 때 자동으로 호출됩니다. 새로 생성된 객체를 역직렬화하려면 초기화 및 할당을 수행합니다.
12. __autoload(): 함수는 클래스 외부에서 선언되어야 합니다. 선언되지 않은 클래스가 인스턴스화되면 자동으로 호출됩니다. 인스턴스화된 클래스 이름을 전달하면 해당 클래스 파일이 클래스 이름을 사용하여 자동으로 로드될 수 있습니다.

6. 추상 클래스 및 추상 메서드

1. 추상 메소드란 무엇인가요?
메서드 본문 {}이 없는 메서드는 abstract 키워드로 수정해야 합니다. 이러한 메소드를 추상 메소드라고 합니다.
추상 함수 say(); //추상 메서드

2.추상 클래스란 무엇인가요?
추상 키워드로 수정된 클래스는 추상 클래스입니다.
추상 클래스 사람{}

3. 추상 클래스에 대한 참고 사항:
① 추상 클래스에는 비추상 메서드가 포함될 수 있습니다.
② 추상 클래스는 추상 클래스여야 하며, 추상 클래스는 그렇지 않아야 합니다.
3 추상 클래스는 인스턴스화할 수 없습니다. (추상 클래스에는 추상 메소드가 포함될 수 있습니다. 추상 메소드에는 메소드 본문이 없으며 인스턴스화 호출은 의미가 없습니다.)
추상 클래스를 사용하는 목적은 인스턴스화를 제한하는 것입니다! ! !

4. 하위 클래스가 추상 클래스를 상속하는 경우 하위 클래스가 추상 클래스가 아닌 한 하위 클래스는 상위 클래스의 모든 추상 메서드를 재정의해야 합니다.

5. 추상 클래스를 사용하는 역할은 무엇인가요?
① 인스턴스화를 제한합니다. (추상 클래스는 불완전한 클래스입니다. 내부의 추상 메소드에는 메소드 본문이 없으므로 인스턴스화할 수 없습니다.)
② 추상 클래스는 하위 클래스의 상속을 위한 사양을 제공합니다. 추상 클래스에 정의된 추상 메서드를 구현합니다.

7. 인터페이스와 다형성

1. 인터페이스
1. 인터페이스란 무엇인가요?
인터페이스는 인터페이스를 구현하는 클래스에서 구현해야 하는 메서드 조합 집합을 제공하는 사양입니다.
인터페이스는 인터페이스 키워드를 사용하여 선언됩니다.
interface Inter{}

2.
인터페이스의 추상 메서드는 필요하지 않으며 추상으로 수정할 수 없습니다.

3. 인터페이스에서는 변수를 선언할 수 없으며, 속성만 사용할 수 있습니다. ! !

4. 인터페이스는 확장 키워드를 사용하여 인터페이스를 상속할 수 있습니다!
인터페이스는 확장 상속 인터페이스를 사용하여 다중 상속을 달성합니다.
interface int1은 Inter,Inter2{}

5를 확장합니다. 클래스는 Implements 키워드를 사용하여 인터페이스를 구현할 수 있습니다!
클래스는 구현을 사용하여 인터페이스를 구현하고 동시에 여러 인터페이스를 구현할 수 있습니다. 여러 인터페이스는 쉼표로 구분됩니다.
추상 클래스 Person은 Inter,Inter2를 구현합니다.{}
클래스는 하나 이상의 인터페이스를 구현합니다. 그러면 이 클래스, 모든 인터페이스의 모든 추상 메서드를 구현해야 합니다!
이 수업은 추상 수업이 아닌 한.

※[인터페이스 && 추상 클래스의 차이점]
1. 선언 방식에서 인터페이스는 인터페이스 키워드를 사용하고 추상 클래스는 추상 클래스를 사용합니다.
2. 구현/상속 측면에서 클래스는 추상 클래스를 상속하기 위해 확장을 사용하고 인터페이스를 구현하기 위해 구현합니다.
3. 추상 클래스는 단독으로만 상속될 수 있지만 인터페이스는 여러 방법으로 구현할 수 있습니다. (인터페이스 확장 인터페이스), 다중 구현 (클래스 구현 인터페이스)
4. 추상 클래스는 비추상 메소드를 가질 수 있는 반면, 인터페이스는 추상 메소드만 가질 수 있고 추상 메소드는 가질 수 없습니다.
추상 클래스의 추상 메서드는 abstract 키워드로 수정해야 하며, 인터페이스의 추상 메서드는 수정자로 수정할 수 없습니다.
5. 추상 클래스는 속성과 변수를 가질 수 있는 클래스입니다. 인터페이스는 상수만 가질 수 있습니다.

2. 다형성
1. 클래스는 여러 하위 클래스에 상속됩니다.
이 클래스의 특정 메서드가 여러 하위 클래스에서 서로 다른 기능을 표시하는 경우 이를 동작 다형성이라고 합니다.

2. 다형성을 달성하는 데 필요한 방법:
① 하위 클래스는 상위 클래스를 상속합니다.
② 하위 클래스는 상위 클래스 메서드를 재정의합니다.
3 상위 클래스 참조는 하위 클래스 객체를 가리킵니다.


위 내용은 PHP의 객체지향에 대한 나의 이해에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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