2014-04-19 37 views
11

Moje aplikacje PHP generalnie używają klas do wyświetlania nazw. Metody w tych klasach są zdefiniowane jako statyczne.PHP: Kiedy używać funkcji i kiedy używać metod statycznych?

Teraz, gdy PHP wprowadził Cechy, próbuję obrócić głowę, kiedy z nich korzystać. Widziałem kilka przykładów używania cech, ale myślę, że można to równie łatwo zaimplementować za pomocą metody klasy statycznej.

Dość dokładny przykład za pomocą rejestratora został wymieniony tutaj: Traits in PHP – any real world examples/best practices?

Ale dlaczego używać cecha, jeśli można również użyć rejestratora statyczny :: log()? Jedyne, o czym teraz mogę myśleć, to łatwy dostęp do $ this. Innym przykładem, z którym teraz stoję, jest funkcja użytkownika. Cecha to, czy to metoda statyczna?

Czy ktoś może rzucić trochę światła na to?

+1

Zarówno wszystkie całkiem bzdurne do użycia w bazie kodu imho. – PeeHaa

+0

@PeeHaa proszę opracować? – Greggg

+0

Oba utrudniają testowanie kodu z powodu ciasnego sprzężenia. Jak również utrzymywać/debugować, ponieważ jakoś jakiś "zewnętrzny" fragment kodu jest "importowany" do klasy. – PeeHaa

Odpowiedz

12

Po przeczytaniu komentarzy na pytanie, moje spojrzenie na odpowiedź jest taka:

cechy umożliwiają rozszerzenie klasy to bez częścią hierarchii klas. Nie ma potrzeby, aby coś takiego jak class Book extends Loggable, ponieważ sama Book nie jest logowaniem, chcemy tylko funkcji Loggable. Funkcjonalność w Loggable może być faszerowana cechą, dzięki czemu można korzystać z metod Loggable w Book, tak jakbyś był od niego.

Zaletą używania cech powyżej użycia metod statycznych w klasach (lub funkcjach o przestrzeni nazw) jest to, że cecha ma dostęp do pełnego zakresu klasy, a także członków prywatnych.

Minusem używania funkcji statycznych zamiast cech jest ścisłe sprzężenie (zależności) między klasami, co niweczy możliwość ponownego użycia i może zaszkodzić testowaniu jednostkom (na przykład przy użyciu próbnych usług). W środowisku wykonawczym należy wprowadzać zależności, co istotnie zwiększa wysiłek tworzenia klasy/metody, ale pozwala na większą elastyczność w stosunku do całej aplikacji. To był dla mnie nowy wgląd.

-3

Cechy mogą uzyskiwać dostęp do prywatnych członków obiektów.

Powiązane problemy