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