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

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()메소드도 사용해야 한다면 어떻게 해야 할까요? 다음시간에는 다른 트레이트에 있는 같은 이름의 메소드를 사용하는 방법에 대해 알아볼게요.