2012-11-27 11 views
7

Il seguente codice:Come usare un tratto più volte in una classe?

trait T { 
    function foo() {} 
} 

class C { 
    use T { T::foo as bar; } 
    use T { T::foo as baz; } 
} 

produce il seguente errore:

Trait method bar has not been applied, because there are collisions with other trait methods on C

E 'possibile utilizzare un tratto due volte in una classe?

risposta

6

di "importare" un metodo definito in un tratto più volte con nomi diversi fanno questo:

class C { 
    use T { 
    foo as bar; 
    foo as baz; 
    } 
} 
+0

che è stato! Grazie. – Benjamin

+1

Posso vedere da dove viene la domanda, ma con questa soluzione hai solo 2 funzioni con esattamente la stessa funzionalità, che funzionano esattamente con gli stessi interni. Perché vorresti 2 funzioni che facciano esattamente la stessa cosa? Sarebbe bello se la funzione "bar" usasse attributi di classe diversi dalla funzione "baz" (in modo che bar e baz facciano lo stesso, ma due volte), ma non è così? – Veda

+0

Penso che questa fosse principalmente una domanda teorica, quindi la risposta molto semplice. –

0

Sì, è possibile utilizzare un tratto due volte:

trait T { 
    function foo() {} 
} 

class C { 
    use T { T::foo as bar; T::foo as baz; } 
} 
Problemi correlati