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