티스토리 뷰

1. 개념
insteadof 역할
서로 다른 trait를 사용할 때 같은 이름의 함수를 사용했을 경우에 어떤 트레이트에 포함된 함수를 가져다 사용할지에 대해 정의를 해줌
2. 예제
insteadof 예시
PHP 코드
traitOne.php
1
2
3
4
5
6
7
8
9
10
11
<?php
 
trait testTrait1
{
public function call ()
{
print_r( "testTrait1에 있는 call() 함수 입니다." );
}
}
 
?>
traitTwo.php
1
2
3
4
5
6
7
8
9
10
11
<?php
 
trait testTrait2
{
public function call ()
{
print_r( "testTrait2에 있는 call() 함수 입니다." );
}
}
 
?>
main.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
//traitOne.php,traitTwo 파일 읽기
require_once ( "traitOne.php" );
require_once ( "traitTwo.php" );
 
class TestTrait
{
//traitOne,traitTwo에 있는 트레이트를 사용선언
use testTrait1,testTrait2
{
//testTrait2에 있는 call 함수를 호출
testTrait2::call insteadof testTrait1;
}
}
 
//클래스로 인스턴스 생성
$test = new TestTrait();
$test -> call();
 
?>
결과 화면
코드 설명
testTrait1.php 파일과 testTrait2.php 파일에 각각 함수를 선언하였습니다.
여기서 함수명은 둘다 call이라는 함수명으로 선언을 하였고 main.php에서 이 두개의 파일을 읽어 들였습니다.
그래서 use를 이용해서 트레이트를 사용하겠다고 선언한 후에 인스턴스를 생성해고 call를 호출하는데 아무런 반응이 없습니다.
이유는 두 파일에서 사용하는 함수명이 똑같이 때문에 그렇습니다.
그러면 어느 쪽 파일에 있는 함수명을 가져다 쓸지에 대해 노선을 타줘야 하는데 그 때 사용하는 키워드가 insteadof라는 것입니다.
영어에서는 '~대신에'라는 것을 뜻하는 이 함수를 사용해서 나는 testTrait2에 있는 call 함수를 가져다 쓰겠다라고 사용을 하게 됩니다.
그러면 위에서와 같은 결과가 출력되는 것을 확인하실 수 있습니다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday