Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Splatch, dodany: 20.01.2008 22:55, tagi: php

Parę dni wstecz trafiłem na ciekawe rozszerzenie Reflection API do PHP. Umożliwia ono używanie tagów phpdoc w charakterze adnotacji. Rozwiązanie te jest zbliżone do znanego mi z Javy xdocleta. Drobną, aczkolwiek zauważalną, różnicą jest fakt, że xdoclet był odpalany przed kompilacją kodu ponieważ bytecode nie zawierał adnotacji. Oczywiście po wejściu Javy 5 xdoclet podupadł, jako coś co wyparły właśnie adnotacje. Może dla tych, którzy nie mieli okazji spotkania sie z takim rozwiązaniem drobny przykład kodu w Javie:

PLAIN TEXT JAVA:
  1. package pl.dywicki.swe.domain;
  2.  
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.GeneratedValue;
  6. import javax.persistence.GenerationType;
  7. import javax.persistence.Id;
  8. import javax.persistence.Table;
  9.  
  10. @ Entity(name = "user")
  11. @Table(name = "user", schema = "public")
  12. public class User {
  13.  
  14.     @Id
  15.     @GeneratedValue(strategy = GenerationType.AUTO)
  16.     @Column(name = "user_id")
  17.     private long id;
  18.    
  19.     @Column(name="user_login")
  20.     private String login;
  21.  
  22.     @Column(name="user_password")
  23.     private String password;
  24.  
  25.     public long getId() {
  26.         return id;
  27.     }
  28.  
  29.     public void setId(long id) {
  30.         this.id = id;
  31.     }
  32.  
  33.     public String getLogin() {
  34.         return login;
  35.     }
  36.  
  37.     public void setLogin( String login) {
  38.         this.login = login;
  39.     }
  40.  
  41.     public String getPassword() {
  42.         return password;
  43.     }
  44.  
  45.     public void setPassword( String password) {
  46.         this.password = password;
  47.     }
  48.    
  49. }

Co umożliwia takie rozwiązanie? Przede wszystkim dzięki zastosowaniu adnotacji spada ilość dodatkowych plików zawierających konfiguracje i mapowania. Oczywiście nie da się ich dzięki temu rozwiązaniu wykluczyć zupełnie, aczkolwiek da się znacznie ograniczyć ich użycie. Wielką zaletą, o której do tej pory nie wspomniałem, w przypadku Javy, jest to, że adnotacje możemy odczytywać w czasie uruchamiania programu a nie przed jego kompilacją.

Adnotacja od strony technicznej

Jak można zadeklarować własną adnotację? Służy do tego specjalna konstrukcja:

PLAIN TEXT JAVA:
  1. public @interface Name {
  2.     String value() default "anonymous";
  3. }

Użycie takiej adnotacji:

PLAIN TEXT JAVA:
  1. @ Name // poprawnie
  2. public class Component {}
  3.  
  4. @ Name("user.session") // również poprawnie
  5. public class User {}

Możemy również przekazać kilka wartości gdy zadeklarujemy w adnotacji odpowiednie pole:

PLAIN TEXT JAVA:
  1. public @interface Relation {
  2.     String[] belongsTo();
  3.     String offer();
  4. }

Użycie takiej adnotacji:

PLAIN TEXT JAVA:
  1. @Relation(belongTo = {"users", "groups"}, offer = "privileges")
  2. public class PrivilegesEntityMapping {}

Warto tutaj wspomnieć o dwóch magicznych umowach. Po pierwsze atrybut o nazwie value jest domyślnym przypisaniem wartości podanej w nawiasach. Tzn przy wywołaniu @Name("user.session") możemy pobrać atrybut poprzez [b]annotationInstance.value()[/b]. Po drugie dodanie po nazwie pola default "wartość" pozwala na pominięcie atrybutu przy definicji. Z ograniczeń, jakie mają adnotacje w Javie - wartościami atrybutów mogą być ciągi znaków, typy (klasy) oraz typy wyliczeniowe (enumy).

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: WojciechNaruniec, dodany: 08.01.2008 14:52, tagi: zend_framework

Też czekacie na Zend_Form? Andries Seutens przygotował małe demo pokazujące obsługę formularza w oparciu o implementację Zend_Form znajdującą się w laboratorium Zend Framework. Ten jeden z najbardziej oczekiwanych komponentów do pakietu ma wejść wraz z Zend Framework w wersji 1.5. Komponent załatwia całą obsługę formularza, od konfigurowania jego pól za pomocą API, przez filtrację i [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.