Komponenty

Komponent jest instancją klasy lub klasy potomnej TComponent. Klasa bazowa TComponent implementuje mechanizm właściwości oraz zdarzeń kompomentu.

Właściwości komponentu (ang. component properties)

Właściwość kompoenentu może być postrzegana jako publiczna zmienna opsiującą określoną cechę/właściwość komponentu, taką jak kolor tła, rozmiar czcionki, itp. Właściwość jest definiowana poprzez istnienie metody getter i/lub setter w klasie. Na przykład w TControl definiujemy właściwość ID komponentu używając następujących funkcji typu getter i setter, class TControl extends TComponent { public function getID() { ... } public function setID($value) { ... } }

Aby pobrać lub ustawić właściwość ID, postępuj jak poniżej (tak jakbyś miał do czynienia ze zmienną): $id = $component->ID; $component->ID = $id; Jest to równoznaczne z następującym zapisem: $id = $component->getID(); $component->setID( $id );

Właściwość jest "tylko do odczytu" jeśli posiada metodę getter a nie posiada metody setter. Odkąd nazwy metod w PHP nie są zależne od wielkiej bądź małej litery, właściwości również są niewrażliwe na wielkość liter. Klasa kompomentu dziedziny wszystkie właściwości rodzica.

Subwłaściwości (ang. subproperties)

Subwłaściwość jest właściwością właściwości typu obiektowego. Dla przykładu TWebControl posiada właściwość Font, która jest typu TFont. Wtedy właściwość Name właściwości Font jest subwłaściwością w stosunku do TWebControl.

Aby pobrać lub ustawić subwłaściwość Name należy użyć następującej metody: $name = $component->getSubProperty('Font.Name'); $component->setSubProperty('Font.Name', $name); Jest to równoznaczne z następującym zapisem: $name = $component->getFont()->getName(); $component->getFont()->setName( $name );

Zdarzenia komponentu

Zdarzenia komponentu są specjalnymi właściwościami, które pobierają nazwy metod jako swoje wartości. Przypisując (ustawiając) metodę do zdarzenia (will hook up the method ) do miejsca gdzie zdarzenie jest wywoływane. Dzięki temu zachowanie komponentu może zostać zmodyfikowane w sposób, który nie był przewidziany podczas fazy dewelopowania komponentu.

Zdarzenie komponentu jest definiowane poprzez istnienie metody, której nazwa zaczyna się przedrostkiem on. Nazwa zdarzenia jest nazwą metody i z tego powodu jest niewrażliwa na wielkość liter. Na przykład w komponencie TButton mamy: class TButton extends TWebControl { public function onClick( $param ) { ... } } W ten sposób definiujemy metodę o nazwie OnClick a uchwyt do zdarzenia przez nią definiowanego może być przypisany w jeden z następujących sposobów: $button->OnClick = $callback; $button->OnClick->add( $callback ); $button->OnClick[] = $callback; $button->attachEventHandler( 'OnClick' , $callback ); gdzie $callback odnosi się do poprawnej funkcji typu callback w PHP (np. nazwy funkcji, metody klasy array($object,'method'), itp.)

Przestrzenie nazw (ang. namespaces)

Przestrzeń nazw odnosi się do logicznego pogrupowania nazwy klas w taki sposób, że moga być one odróżniane od innych klas, których nazwy są identyczne. Ponieważ PHP nie wspiera przestrzeni nazw sam w sobie, nie można stworzyć instancji dwóch klas, które mają tą samoą nazwę ale różne definicje. Aby odróżniać się od klas użytkowników wszystkie klasy PRADO posiadają prefix 'T' (oznaczający 'Type' - z angielskiego: typ). Zachęcamy do nazywania własnych klas w ten sposób. W odróznieniu można dodawać prefiksy klas zaczynające się dowolną inną literą (lub grupą liter).

Przestrzeń nazw w PRADO jest postrzegana jako folder zawierający jednen lub więcej plików klas. Poprzez poprzedzania nazwy klasy przestrzenią nazw klasa może zostać określona jednoznacznie. Każda przestrzeń nazw jest w PRADO określona w następujący sposób:

PathAlias.Dir1.Dir2
gdzie PathAlias jest aliasem jakiegoś katalogu, gdzie Dir1 i Dir2 są podkatalogami tego katalogu. Klasa o nazwie MyClass zdefiniowana w Dir2 jest fully qualified poprzez PathAlias.Dir1.Dir2.MyClass.

By używać przestrzeni nazw w kodzie, napisz: Prado::using('PathAlias.Dir1.Dir2.*'); co spowoduje dołączenie katalogu wskazywanego przez PathAlias.Dir1.Dir2 do ścieżek include w PHP, dzięki czemu instancje klas zdefiniowanych w podanym katalogu mogą zostać utworzone bez podawania pełnej przestrzeni nazw. Możesz również zainkludować pojedyńczą definicję klasy poprzez Prado::using('PathAlias.Dir1.Dir2.MyClass'); co spowoduje zainkludowanie pliku klasy MyClass jeśli nie została ona jeszcze zdefiniowana.

Aby zobaczyć więcej informacji o definiowaniu aliasów zobacz sekcję konfigurowanie aplikacji.

Tworzenie instancji komponentu

Tworzenie instancji komponentu oznacza tworzenie instancji klasy komponentu. Rozróżniamy dwa typy instancji komponentu: statyczną i dynamiczną. Utworzone komponenty nazywane są odpowiednio komponentami statycznymi i dynamicznymi.

Dynamiczne tworzenie instancji komponentów

Dynamiczne tworzenie instancji komponentów oznacza tworzenie instancji komponentu w kodzie PHP. Wygląda to identycznie jak zwyczajne tworznie komponentów w PHP. Komponent może zostać dynamicznie utworzony w jeden z poniższych sposobów w PHP: $component = new ComponentClassName; $component = Prado::createComponent('ComponentType'); gdzie ComponentType wskazuje na nazwę klasy lub nazwę typu w formacie przestrzeni nazw (np. System.Web.UI.TControl). Drugi sposób został wprowadzony aby wypełnić brak wsparcia dla przestrzeni nazw w PHP.

Statyczne tworzenie instancji komponentów

Statyczne tworzenie instancji komponentów odnosi się do tworznenia komponentów poprzez konfigurację. Proces tworzenia odbywa się po stronie frameworku. Na przykład w konfiguracji aplikacji można skonfigurować moduł, który zostanie załadowany podczas uruchamiania aplikacji. Zatem moduł jest statycznym komponentem stworzonym przez framework. Statyczne tworzenie instancji jest często wspólnie używane w szablonach. Każdy tag komponentu w szablonie określa komponent, który będzie automatycznie stworzony przez framework, kiedy szablon będzie ładowany. Na przykład w szablonie strony następujący tag doprowadzi do stworzenia komponentu TButton na stronie: <com:TButton Text="Register" />

$Id$