선생님을 위한 프로그래밍 수업

Interface

토픽 선생님을 위한 프로그래밍 수업 > 웹 애플리케이션 만들기 > PHP

수업소개

인터페이스는 서로 다른 시스템이 결합되는 접점을 의미합니다. 이 때 서로 시스템이 잘 결합하기 위해서는 상호간에 엄격한 약속이 필요합니다. 프로그래밍에서의 인터페이스도 마찬가지입니다. 이 수업에서는 프로그래밍에서는 어떻게 인터페이스를 구현하는가를 알아보겠습니다. 

수업

소개

<?php
interface ContractInterface
{
    public function promiseMethod(array $param):int;
}
interface ContractInterface2
{
    public function promiseMethod2(array $param):int;
}

class ConcreateClass implements ContractInterface, ContractInterface2
{
    public function promiseMethod(array $param):int
    {
        return 1;
    }
    public function promiseMethod2(array $param):int
    {
        return 1;
    }
}
$obj = new ConcreateClass();
$obj->promiseMethod([1,2]);

사례

<?php
interface ContractInterface
{
    public function compare(string $str1, string $str2):bool;
}
class Concreate implements ContractInterface
{
    public function compare(string $str1, string $str2):bool
    {
        if($str1 === $str2)
            return true;
        else
            return false;
    }
}
class Dummy implements ContractInterface
{
    public function compare(string $str1, string $str2):bool
    {
        return true;
    }
}
$obj = new Concreate();
if ($obj->compare('test1', 'test2')) {
    echo '<h1>same</h1>';
} else {
    echo '<h1>different</h1>';
}

사례

모노로그에서 인터페이스를 사용하는 사례를 살펴봅니다. monolog에 대한 자세한 설명은 아래 수업을 참고하세요. https://opentutorials.org/module/6/15756

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\NativeMailerHandler;

$log = new Logger('name');
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::ERROR));
$log->pushHandler(new NativeMailerHandler(
    'egoing@gmail.com',
    'Emergence!!!!',
    'out@system.com',
    Logger::EMERGENCY));

$log->warning('EGO');
$log->error('ING');
$log->emergency('emergency');

댓글

댓글 본문
  1. 24.01.07 코드에서 이루어지는 계약
  2. 드림보이
    2022.01.25. Interface 파트 수강완료
  3. jeisyoon
    2021.08.11 Interface - OK
  4. psmqdt
    Phpstorm 대단한 에디터이군요.
  5. psmqdt
    concreate -> concrete (영어 철자 문제)
  6. 그리드
    마지막 동영상을 보면 기존에 atom을 사용하다 PhpStorm 으로 바꾼거 같아요.
    대화보기
    • 매리미
      아톰 아니면 vs에디터인가 스튜디오인가 일겁니다. 개발도구 편에 보시면 있을 겁니다.
      대화보기
      • 밴크
        3번째 동영상은 마지막 4분 정도가 한번 더 반복이 되네요
      • phpstorm 이라고 하시네용
        대화보기
        • 꽃대군
          동영상에 사용되는 에디터가 무엇입니까,,,,,,?
          누구든 좀 도와 주세요,,,,,,,,,
        • 어려워
          노무어려워요!
        • orez
          흐..세번째는 특히나 어렵네요. 후에, 다시 도전하겠습니다..^.^
        • mirong1
          집중해서 다 듣긴 했지만, 솔직히 어렵네요. 능력 부족.
        • 리턴 타입 선언때문에 에러가 나는 것이네요.
          리턴 타입 선언은 php 7에 추가되었구요.

          http://php.net......ion
          대화보기
          • spacepublisher
            저는 모 웹호스팅업체의 무료버전 이용중인데
            그게 버전이 5.6.30입니다. 좀 더 높은 버전에서 되는건가 보내요~

            감사합니다~
            대화보기
            • egoing
              앗 php 버전이 낮으면 안 될 수 있어요!
              대화보기
              • spacepublisher
                첫번째 예제에서 리턴 데이터 타입을 정의하는 부분. 즉,
                :int
                이 콤마(comma)부분에서 에러가 납니다.
                Parse error: syntax error, unexpected ':', expecting ';' or ...
                왜그럴까영?
                도와주십시오 ㅜㅜ
              • egoing
                ㅋㅋ 패스트 팔로워십니다!
                대화보기
                • 폭스킴
                  아~ 또 만드셨어;; 더 만드실 거 같은데;; 코드방화범 되는게 점점 힘들어지고 있네요 ㅋ