[최신 PHP] Chapter 2 새로운 기능 2 인터페이스 기반 프로그래밍
인터페이스 기반 프로그래밍
PHP 프로그래머로서 인터페이스 기반 프로그래밍 방법을 배우면서 인생이 바뀌었고 타사 PHP 구성 요소를 통합하는 능력이 크게 향상되었습니다. . 내 프로젝트 능력을 향상시키기 위해. 인터페이스는 새로운 기능은 아니지만 일상 업무에서 이해하고 사용해야 하는 중요한 기능입니다.
그럼 PHP의 인터페이스란 정확히 무엇일까요? 인터페이스는 두 개의 PHP 개체 간의 계약입니다. 한 개체가 다른 개체를 호출할 때 상대방이 무엇인지 알 필요는 없고 상대방이 무엇을 할 수 있는지만 알면 됩니다. 인터페이스는 코드의 종속성 결합을 줄여 코드가 원하는 인터페이스를 구현하는 타사 코드를 호출할 수 있게 해줍니다. 우리는 제3자 코드가 인터페이스를 구현하는지 여부에만 관심을 가질 필요가 있으며, 제3자 코드가 이러한 인터페이스를 구현하는 방법에는 전혀 관심을 가질 필요가 없습니다. 실제 사례를 살펴보겠습니다.
Sunshine PHP 개발자 컨퍼런스에 참석하기 위해 플로리다주 마이애미로 간다고 가정해 보겠습니다. 나는 도시를 탐험하고 싶어서 곧바로 현지 렌터카 업체로 갔다. 그들은 현대식 소형차, 스바루 스테이션 왜건, 부가티 베이론(놀랍게도)을 갖고 있었습니다. 나는 단지 시내를 돌아다니기 위한 어떤 형태의 교통수단을 원했고 이 세 대의 차량이 모두 내 필요에 적합하다는 것을 알았습니다. 하지만 차마다 너무 다릅니다. 현대 엑센트도 나쁘지는 않지만 좀 더 다이나믹한 걸 좋아합니다. 저는 아이가 없어서 스테이션 왜건이 아직 좀 크거든요. 그럼 그냥 Bugatti를 선택하세요.
현실적으로는 이 세 대의 자동차가 모두 공통적이고 알려진 인터페이스를 공유하기 때문에 아무 문제 없이 운전할 수 있다는 것입니다. 모든 자동차에는 운전대, 가속 페달, 브레이크 페달, 방향 지시등이 있고 휘발유를 연료로 사용합니다. 그런데 부가티의 힘은 너무 강력해서 도저히 감당이 안 되지만, 현대 자동차의 주행 인터페이스는 똑같습니다. 세 대의 자동차 모두 동일한 인터페이스를 공유하기 때문에 더 마음에 드는 모델을 선택할 수 있는 기회가 있습니다(솔직히 말하면 결국 현대를 선택할 것 같습니다).
PHP의 객체지향 측면에도 동일한 개념이 적용됩니다. 내 코드가 특정 클래스의 개체(특정 구현을 나타냄)를 사용하는 경우 해당 클래스의 개체만 영구적으로 사용할 수 있기 때문에 내 코드의 기능이 매우 제한됩니다. 그러나 내 코드가 인터페이스를 사용하려는 경우 내 코드는 인터페이스를 구현하는 개체를 사용하는 방법을 즉시 알게 됩니다. 내 코드는 인터페이스가 어떻게 구현되는지 전혀 신경 쓸 필요가 없습니다. 내 코드는 객체가 인터페이스를 구현하는지 여부에만 신경을 씁니다. 예를 사용하여 이 모든 것을 명확하게 설명하겠습니다.
다른 데이터 소스에서 데이터를 가져올 수 있는 DocumentStore라는 PHP 클래스가 있다고 가정해 보겠습니다. 이 클래스는 원격 주소에서 HTML을 가져오거나 데이터를 가져올 수도 있습니다. 터미널의 명령줄 출력. DocumentStore 인스턴스에 저장된 각 문서에는 고유한 ID가 있습니다. 예제 2-6에서는 DocumentStore 클래스를 보여줍니다.
예제 2-6 DocumentStore 클래스 정의
class DocumentStore { protected $data = []; public function addDocument(Documentable $document) { $key = $document->getId(); $value = $document->getContent(); $this->data[$key] = $value; } public function getDocuments() { return $this->data; } }
addDocument 메소드가 매개변수로 문서화할 수 있는 클래스 함수를 설명하시겠습니까? 관찰력이 아주 좋습니다. 사실 Documentable은 클래스가 아니라 인터페이스입니다. 예제 2-7
예제 2-7 Documentable 인터페이스 정의
interface Documentable { public function getId(); public function getContent(); }
인터페이스 정의에서 Documentable 인터페이스를 구현하는 모든 객체는 공용 getId() 메서드와 공용 getContent() 메서드를 정의해야 함을 알 수 있습니다.
이렇게 하면 어떤 이점이 있나요? 장점은 서로 다른 기능을 가진 여러 문서 획득 클래스를 구성할 수 있다는 것입니다. 예제 2-8에서는 컬을 사용하여 원격 주소에서 HTML을 얻는 인터페이스 구현을 보여줍니다.
예제 2-8 HtmlDocument 클래스 정의
<?php class HtmlDocument implements Documentable { protected $url; public function __construct($url) { $this->url = $url; } public function getId() { return $this->url; } public function getContent() { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_MAXREDIRS, 3); $html = curl_exec($ch); curl_close($ch); return $html; } }
다른 구현(예 2-9)은 지정된 리소스 데이터 흐름을 읽을 수 있습니다. 안에 .
예제 2-9 StreamDocument 클래스 정의
<?php class StreamDocument implements Documentable { protected $resource; protected $buffer; public function __construct($resource, $buffer = 4096) { $this->resource = $resource; $this->buffer = $buffer; } public function getId() { return 'resource-' . (int)$this->resource; } public function getContent() { $streamContent = ''; rewind($this->resource); while (feof($this->resource) === false) { $streamContent .= fread($this->resource, $this->buffer); } return $streamContent; } }
마지막 구현(예제 2-10)은 터미널 명령을 실행하고 실행 결과를 얻을 수 있습니다.
예제 2-10 CommandOutputDocument 클래스 정의
<?php class CommandOutputDocument implements Documentable { protected $command; public function __construct($command) { $this->command = $command; } public function getId() { return $this->command; } public function getContent() { return shell_exec($this->command); } }
예제 2-11은 DocumentStore 클래스를 사용하여 우리가 구현한 Documentable을 작동하는 방법을 보여줍니다. 인터페이스의 세 가지 문서 컬렉션 클래스
예 2-11 DocumentStore
<?php $documentStore = new DocumentStore(); // Add HTML document $htmlDoc = new HtmlDocument('http://php.net'); $documentStore->addDocument($htmlDoc); // Add stream document $streamDoc = new StreamDocument(fopen('stream.txt', 'rb')); $documentStore->addDocument($streamDoc); // Add terminal command document $cmdDoc = new CommandOutputDocument('cat /etc/hosts'); $documentStore->addDocument($cmdDoc); print_r($documentStore->getDocuments());
이것의 가장 큰 하이라이트는 인터페이스 외에도 HtmlDocument, StreamDocument 및 CommandOutputDocument 클래스 일관성을 제외하고 다른 측면은 완전히 다릅니다.
오늘날 프로그래밍 인터페이스는 더욱 유연한 코드를 생성하며 더 이상 특정 구현에 신경 쓰지 않고 이러한 작업을 다른 사람에게 맡깁니다. 점점 더 많은 사람들(예: 동료, 오픈 소스 프로젝트 사용자 또는 한 번도 만난 적이 없는 개발자)이 원활하게 작동하는 코드를 작성할 수 있으며 그들은 Just 인터페이스를 이해하기만 하면 됩니다.
위의 내용은 [Modern PHP] Chapter 2 새로운 기능 2 인터페이스 기반 프로그래밍에 대한 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











함수는 특정 기능을 포함하는 재사용 가능한 코드 블록으로, 입력 매개변수를 받아들이고 특정 작업을 수행하며 결과를 반환하는 것이 목적입니다. 코드 재사용성과 유지 관리성을 향상시키는 코드입니다.

매년 Apple이 iOS 및 macOS의 새로운 주요 버전을 출시하기 전에 사용자는 몇 달 전에 베타 버전을 다운로드하여 먼저 경험할 수 있습니다. 소프트웨어는 대중과 개발자 모두가 사용하기 때문에 Apple은 개발자 베타 버전의 공개 베타 버전인 개발자 버전과 공개 버전을 모두 출시했습니다. iOS 개발자 버전과 공개 버전의 차이점은 무엇인가요? 말 그대로 개발자 버전은 개발자 베타 버전이고, 퍼블릭 버전은 퍼블릭 베타 버전이다. 개발자 버전과 공개 버전은 서로 다른 대상을 대상으로 합니다. 개발자 버전은 개발자가 테스트하기 위해 Apple에서 사용합니다. 다운로드하고 업그레이드하려면 Apple 개발자 계정이 필요합니다.

이번 글에서는 enumerate() 함수와 Python에서 “enumerate()” 함수의 목적에 대해 알아봅니다. enumerate() 함수란 무엇입니까? Python의 enumerate() 함수는 데이터 컬렉션을 매개변수로 받아들이고 열거형 객체를 반환합니다. 열거형 객체는 키-값 쌍으로 반환됩니다. 키는 각 항목에 해당하는 인덱스이고 값은 항목입니다. 구문 enumerate(iterable,start) 매개변수 iterable - 전달된 데이터 컬렉션은 iterablestart라는 열거형 개체로 반환될 수 있습니다. - 이름에서 알 수 있듯이 열거형 개체의 시작 인덱스는 start로 정의됩니다. 우리가 무시한다면

MySQL.proc 테이블의 역할과 기능에 대한 자세한 설명 MySQL은 널리 사용되는 관계형 데이터베이스 관리 시스템으로, 개발자가 MySQL을 사용할 때 저장 프로시저(StoredProcedure)를 생성하고 관리하는 경우가 많습니다. MySQL.proc 테이블은 저장 프로시저의 이름, 정의, 매개변수 등을 포함하여 데이터베이스의 모든 저장 프로시저와 관련된 정보를 저장하는 매우 중요한 시스템 테이블입니다. 이번 글에서는 MySQL.proc 테이블의 역할과 기능에 대해 자세히 설명하겠습니다.

Vue.use 함수의 사용법 및 기능 Vue는 많은 유용한 기능을 제공하는 널리 사용되는 프런트 엔드 프레임워크입니다. 그 중 하나는 Vue 애플리케이션에서 플러그인을 사용할 수 있게 해주는 Vue.use 기능입니다. 이 기사에서는 Vue.use 함수의 사용법과 기능을 소개하고 몇 가지 코드 예제를 제공합니다. Vue.use 함수의 기본 사용법은 매우 간단합니다. Vue가 인스턴스화되기 전에 호출하고 매개변수로 사용하려는 플러그인을 전달하면 됩니다. 다음은 간단한 예입니다. //플러그인 소개 및 사용

Vue2의 이 포인팅 문제로 인해 동료가 버그로 인해 화살표 기능이 사용되어 해당 소품을 얻을 수 없게 되었습니다. 제가 그에게 소개했을 때 그는 그것을 몰랐고, 그래서 저는 일부러 프론트엔드 커뮤니케이션 그룹을 살펴보았습니다. 지금까지 적어도 70%의 프론트엔드 프로그래머들은 오늘 그것을 이해하지 못하고 있습니다. 모든 것이 불분명하다면 이 링크를 아직 배우지 않았다면 큰 소리로 말해주세요.

Java 공용 액세스 수정자를 사용하면 어디에서나 함수에 액세스할 수 있으며 공용 API를 선언하고 패키지 또는 클래스 간에 공유되는 도구 및 유틸리티를 정의하는 데 사용됩니다. 구체적인 사용법은 다음과 같습니다. 구문: 공용 반환 값 유형 함수 이름(매개변수 목록) {...} 시나리오: 어디서나 액세스해야 하는 함수, 공용 API의 메서드, 공유 도구 또는 유틸리티
