P粉7029469212023-09-03 20:17:24
인터페이스가 "클래스의 동작을 변경한다"고 말하는 것이 아니라, 인터페이스가 클래스 기능을 확장 쉽게 만든다는 뜻입니다.
객체 지향 프로그래밍 개념인 인터페이스를 이해하려면 먼저 인터페이스가 해결하려는 문제가 무엇인지 이해해야 합니다.
인터페이스는 계약입니다. PHP에서 duck-typing을 구현하는 방법은 다음과 같습니다. 기능을 다른 사람에게 공개하려는 라이브러리 작성자의 관점에서 생각해야 합니다. 예를 들어
으아악도서관 이용자들이 $person
需要有 getName()
方法,您可以创建一个类 Person
> 有一个 getName()
방법을 인지할 수 있도록 합니다. 그런 다음 유형 선언을 사용하여 코드가 해결될 때 잠재적인 오류를 감지하세요.
음식으로 사물에게 먹이를 주는 또 다른 라이브러리가 있다고 가정해 보겠습니다.
으아악이제 사용자가 식사와 인사를 동시에 할 수 있는 함수를 작성하고 싶다고 가정해 보겠습니다. Pet
类。用户不想仅仅为了 Pet
이 함수들을 다시 작성해 보세요.
Pet
以便同时使用 Greeter
和 Feeder
라이브러리 작성 방법은 무엇인가요?
아마도 그럴까요?
으아악안타깝게도 PHP는 다중 상속을 지원하지 않습니다. 하나의 클래스에는 하나의 클래스만 있을 수 있습니다. 위의 코드는 유효하지 않습니다. 따라서 현재 상황에서 사용자는 라이브러리 중 하나만 사용할 수 있습니다. 扩展
방법을 사용할 수도 있습니다. getName() 返回
$first_name
和 $last_name
代码>)。您的库类中可能没有合理的默认实现 getName()
PHP의 "인터페이스"를 사용하여 이 문제를 해결하는 방법은 무엇입니까?
인터페이스를 사용하면 두 라이브러리를 다음과 같이 다시 작성할 수 있습니다.
Greeter
으아악
Feeder
으아악
클래스는 PHP에서 완전히 유효합니다. Pet
으아악
클래스의 개체를 Pet
类的对象可以与 Greeter
库和 Feeder
라이브러리 및
ArrayAccess
앞서 언급한 인터페이스와 마찬가지로 PHP는 이를 구현하는 클래스에 기능을 제공합니다. 그러나 위의 Greeter
或 Feeder
예제를 제공하는 대신 핵심 PHP는 ArrayAccess를 구현하는 클래스에 대해 구문적 설탕을 제공합니다. 즉, AccessAccess 인터페이스를 구현하는 클래스를 처리할 때 더 간단한 코드를 사용할 수 있습니다.
공식 예에서는
으아악구현한 경우 다음으로 바꾸세요.
으아악배열과 같은 구문에 $obj
를 사용하면 코드를 더 짧게 만들 수 있습니다.