2012-02-29 13 views
6

Powiel możliwe:
traits in php – any real world examples/best practices?Jakie są możliwe scenariusze użycia dla cech w PHP?

W jakich sytuacjach należałoby użyć cech w PHP? Mam całkiem niezły ogólny pogląd na to, ale nie mogę wymyślić sposobu na wykorzystanie ich w aplikacji, którą napisałem, ale może tak być dlatego, że nie potrzebuje ona w tym czasie cech.

Jeden scenariusz zdałem sobie sprawę, że potrzebuje cechy:

  • wydarzenia. Zamiast mieć jedną klasę, która implementuje wzorzec obserwatora i pozwala wszystkim klasom dziedziczyć go, po prostu uczyń go cechą i pozwól klasom, które chcą wywoływać zdarzenia lub zasubskrybuj, aby użyć tej cechy. Na przykład framework Yii robi to źle, implementując rzeczy w klasie CComponent, zamiast używać cechy.

Zasadniczo funkcje, które można udostępniać w ramach klas, ale mogą rozprzestrzeniać się w hierarchiach wielu klas, powinny wykorzystywać cechy. Jakie inne scenariusze mogą skorzystać z Cechy niż system wydarzeń?

Odpowiedz

-4

Problem, który odnosi się do Cech, jest podobny do problemu, jaki adresy Java mają z interfejsami - jak wymusić typowe zachowanie (reprezentowane przez interfejsy) między klasami, które nie należą do tej samej hierarchii klas.

W przypadku języków takich jak C++, które mają tylko dziedziczenie, w przypadku dwóch obiektów z dwóch różnych klas, które mają być używane w tym samym kontekście wymagającym tego samego zachowania, dwie klasy musiały pochodzić z tej samej hierarchii. Oznaczało to czasami tworzenie całkiem sztucznych hierarchii po prostu w celu umożliwienia użycia obiektów z różnych klas w tym samym kontekście.

Java rozwiązała ten problem poprzez interfejsy - interfejs jest zasadniczo umową regulującą dostarczanie zachowania, tak aby obiekt jednej klasy mógł zostać zastąpiony obiektem oddzielnej klasy, ponieważ obiecuje to samo zachowanie - interfejs. Ale nie muszą pochodzić z tej samej hierarchii.

Cechy PHP ucieleśniają ten pomysł. Cecha to rodzaj interfejsu, zestawu zachowań zawartych w klasie, dzięki czemu można go używać w kontekście wymagającym takiego zachowania. Tak więc, każdy przykład interfejsu Javy powinien przenieść się na przykład w PHP Traits. Cechy PHP są nieco inne niż interfejsów Javy, ponieważ Cechy mogą zawierać pełne definicje funkcji, podczas gdy interfejsy Java mogą zawierać tylko deklaracje (typowe idiosynkasy PHP!)

+6

PHP posiada również [interfejsy] (http://php.net /manual/en/language.oop5.interfaces.php), niezależnie od cech ...! Jeśli chcesz porównać jabłka z jabłkami, cechy są jak mixiny z języków takich jak Ruby lub, dobrze, cechy z języków takich jak Self. – deceze

+3

Nie sądzę, że interfejsy mają wiele wspólnego z Cechami. – Tower

+0

Zostawię to tutaj http://compsci.ca/v3/viewtopic.php?t=14785 –

Powiązane problemy