PHP > LIBRARY > Trait
 
PHP
Library
Tip&Tech
Q&A
 
PHP Function
phpschool
그누보드
LIBRARY
  HOME > PHP > LIBRARY
 
Trait
작성일 : 19-01-08
조회 : 136  

Trait

method들의 집합으로 class와 달리 다중상속이 가능하다.

Interface와 달리 굳이 안에 있는 method를 선언을 해주지 않아도 됨(mixin 같은 기능)

use trait명 을 사용한다.(불러올 때)

abstract method(반드시 선언되야하는)와 static method도 설정 가능

private, protected, public method 가능

trait간 상속 가능

변수 저장시키는 것도 가능

<?php trait Chargeable{ public function charge(){ echo "I'm charging.......</br>"; } } class Toy{} class ElectronicCarToy extends Toy{ use Chargeable; } $o = new ElectronicCarToy (); $o->charge(); // I'm charging..... ?>

같은 이름의 method가 여러개 있을 때 순서

현재 class의 method => trait의 method => 부모 class 순서이다

즉, 현재 class에서 override가 가능하다는 뜻

<?php trait Chargeable{ public function charge(){ echo "Chargeable is charging.......</br>"; } } class Toy{ public function charge(){ echo "Toy is charging..."; } } class ElectronicCarToy extends Toy{ use Chargeable; public function charge(){ echo "ElectronicCarToy is charging"; } } $o = new ElectronicCarToy (); $o->charge(); // "ElectronicCarToy is charging"; // 만약 ElectronicCarToy class가 없었으면 Chargeable is charging.......</br> ?>

Trait 다중으로 가져오기(instead of, as)

Trait를 다중으로 가져올 때에는 method가 겹쳐 있으면 안된다.

만약 중복되는 method가 있다면 어떤 trait의 method를 사용할 지 적용해야함

혹은 as를 이용해서 method의 이름을 바꿀수도 있다.

<?php trait Chargeable{ public function charge(){ echo "Chargeable is charging.......</br>"; } } trait Toy{ public function charge(){ echo "Toy is charging..."; } } class ElectricCarToy{ use Chargeable, Toy{ Chargeable::charge insteadof Toy; // Chargerble trait의 charge 사용하게 살정 Toy::charge as xyz; // toy의 charge method의 이름을 바꾸기 } } $o = new ElectricCarToy(); $o->charge(); ?>

trait 상속 제한하기(as private)

class 상속과 마찬가지로 trait도 상속 제한 가능하다.

<?php trait Chargeable{ public function charge(){ echo "Chargeable is charging.......</br>"; } } class ElectricCarToy{ use Chargeable{ charge as private xyz; // Chargerble trait의 charge를 private한 xyz로 변경(그냥 private만도 가능) } } $o = new ElectricCarToy(); $o->xyz(); // Chargeable is charging....... ?>

trait 안에 trait 상속하기

trait 안에서 trait use도 가능함

<?php trait abc{ public function abc(){ echo "abc<br/>"; } } trait xyz{ public function xyz(){ echo "xyz</br>"; } } trait alphabet{ use abc, xyz; } class ElectricCarToy{ use alphabet; } $o = new ElectricCarToy(); $o->abc(); // abc $o->xyz

 
 

Total 77
번호 제   목 조회
공지 php 라이브러리 423
77 매직해시(MAGIC HASHES) 취약점 137
76 Trait 137
75    Trait 150
74 Overloading 142
73    Overloading 138
72 Type hinting/Type 설정하기/Throw error 134
71    Type hinting/Type 설정하기/Throw error 110
70    Type hinting/Type 설정하기/Throw error 141
69 object clone 152
68    object clone 135
67 serialize / unserialize 133
66 spl_autoload_register(오토로드) 122
65 window에서 composer깔기 140
64 Exception/try/throw/catch 140
63 Error의 종류 134
62    Error의 종류 137
61    Error의 종류 137
60 eval 134
59 Magic_methods 143
58    Magic_methods 146
 1  2  3  4  
 
개인홈페이지 덤벙닷컴은 프로그래머와 디자이너위한 IT커뮤니티 공간입니다.
Copyright ⓒ www.dumbung.com. All rights reserved.