happy cat image

everdevel

Web Technology, 에버디벨

UI 변경

EEOS

에버디벨 책을 학습할 수 있는 클라우드 개발 환경을 제공합니다.
개발환경구축없이 태블릿에서도 개발할 수 있는 책의 예제와 프로젝트
오직 당신을 위한 스토리지, URL, DB, 무제한 트래픽
그리고 웹기반 개발환경을 제공합니다.

더 알아보기
에버디벨이 만든 클라우드 개발환경을 소개합니다.

트레이트의 메소드 대신 사용할 명칭 정하기

2개의 트레이트를 사용하는데 2개의 트레이트에 동일한 이름의 메소드가 있다고 할 때 둘 중 어떠한 것을 사용할 지정할 수 있어요.
어떤 메소드를 사용할지 지정하는 키워드 insteadof입니다.

insteadof 사용 방법

trait 트레이트명{}
class 클래스명
{
    use 트레이트명, 트레이트명 {
        사용할 트레이트명::메소드명 insteadof 안사용할 트레이트명;
    }
}

자 그럼 예제를 통해서 볼까요.

<?php
    trait apple
    {
        public function phone()
        {
            return 'iPhone';
        }
    }

    trait samsung
    {
        public function phone()
        {
            return 'galaxy';
        }
    }

    class disneyAnimation
    {
        use apple, samsung {
            apple::phone insteadof samsung;
        }
    }

    $disney = new disneyAnimation;
    echo "주토피아의 주디는 ".$disney->phone()."를 사용합니다.";
?>

trait가 3개일 때는 instead of 뒤에 , 를 찍고 사용하지 않을 트레이트명을 적어줍니다.

insteadof 다중 사용 방법

trait 트레이트명{}
class 클래스명
{
    use 트레이트명, 트레이트명 {
        사용할 트레이트명::메소드명 insteadof 안사용할 트레이트명, 안사용할 트레이트명;
    }
}

다음의 예제로 다중으로 insteadof를 체험해볼까요

<?php
    trait apple
    {
        public function phone()
        {
            return 'iPhone';
        }
    }

    trait samsung
    {
        public function phone()
        {
            return 'galaxy';
        }
    }

    trait lg
    {
        public function phone()
        {
            return 'g';
        }
    }

    class disneyAnimation
    {
        use apple, samsung, lg {
            apple::phone insteadof samsung, lg;
        }
    }

    $disney = new disneyAnimation;
    echo "주토피아의 주디는 ".$disney->phone()."를 사용합니다.";
?>

만약에 다른 트레이트에 있는 phone()메소드도 사용해야 한다면 어떻게 해야 할까요? 다음시간에는 다른 트레이트에 있는 같은 이름의 메소드를 사용하는 방법에 대해 알아볼게요.

강좌로 돌아가기