Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: bigzbig, dodany: 19.06.2011 16:34, tagi: php

Z frameworkiem Kohana pracuję już kilka lata. O ile Kohana w wersji 2 była przyjazna i w miarę dobrze udokumentowana o tyle 3-cie wydanie tego frameworka jest już mniej przyjazne. Nie zrozumcie mnie źle – ogólnie zmiany w architekturze i implementacji oceniam pozytywnie, ale ogromne braki w dokumentacji i ciągłe zmiany w kodzie mają zdecydowanie [...]

Autor wpisu: Tomasz Kowalczyk, dodany: 19.06.2011 16:04, tagi: javascript, jquery, mysql, php

Chcąc stworzyć dynamiczną stronę oferującą wiele funkcjonalności w sposób zbliżony do tego, jak zachowują się aplikacje desktopowe, niestety nie mamy innej możliwości niż wykorzystanie technologii AJAX. Wychodząc naprzeciw tym wymaganiom dzisiaj publikuję kolejny zestaw przydatnych materiałów dotyczących tworzenia różnego rodzaju funkcjonalności z jej wykorzystaniem. Mam nadzieję, że przydadzą się Wam zarówno w pracy, jak i [...]

Autor wpisu: batman, dodany: 17.06.2011 18:18, tagi: php

Rano na blogu Wojtka Soczyńskiego pojawił się interesujący wpis wymieniający listę nowości i zmian jakie prawdopodobnie pojawią się w kolejnym dużym wydaniu PHP, oznaczonym numerem 5.4. Należą do nich (wg wpisu Wojtka):

  1. Dodanie zarezerwowanej przestrzeni nazw “php”.
  2. Zarezerwowanie nazw typów prostych jako słów kluczowych (string, int etc) na wypadek, gdyby kiedyś było to potrzebne (type hinting).
  3. Dodanie błędów klasy E_STRICT do klasy E_ALL.
  4. Całkowite usunięcie magic_quotes.
  5. Binarna notacja dla liczb całkowitych (np 0b10101).
  6. Krótka notacja dla tablic, czyli ['raz','dwa','trzy'] == array(‘raz’,’dwa’,’trzy’).
  7. Nowa opcja w php.ini “disable post data processing”.
  8. Wbudowany deweloperski mini serwer www.
  9. Możliwość ustawienia klasy, jako sposobu obsługi sesji.
  10. Dodanie nowego type hint „callback”, który sprawdzał by, czy argument przekazany do funkcji jest wywoływalny – sprawdzenie dla „Closure”, array($obiekt,’nazwa_metody’), $nazwaFunkcji.

Listę przeczytałem kilka razy (aby upewnić się, że dobrze wszystko zrozumiałem), poszukałem informacji na temat niektórych punktów oraz popadłem w zadumę nad przyszłością PHP. Widać, że język chce iść do przodu, a proponowane zmiany mają mu w tym pomóc. Każdą ze zmian starałem się dobrze przeanalizować i doszedłem do takich oto wniosków.

  1. Dobre posunięcie, które zagwarantuje zamknięcie wszystkich wbudowanych w język funkcji i klas w jednym pojemniku. Mam nadzieję, że dzięki temu wywołanie wbudowanej funkcji lub klasy z poziomu przestrzeni nazw będzie traktowane identycznie. Obecnie przed nazwą klasy należy dodać backslash.
  2. Szkoda, że tylko zarezerwowanie, a nie wprowadzenie type hint. Niemniej pozwala to mieć nadzieję na przyszłość.
  3. Zmiana raczej kosmetyczna, z której będą cieszyć się puryści PHP, dla których “ordnung muss sein”.
  4. Nie pamiętam kiedy ostatni raz z tego korzystałem, więc z mojej perspektywy nie ma to żadnego znaczenia.
  5. Nie miałem jeszcze nigdy potrzeby korzystania z binarnego zapisu, więc podobnie jak w poprzednim punkcie, zmiana ta nie ma dla mnie większego znaczenia.
  6. W przypadku tej zmiany, szczerze przyznam, że nie wiem co myśleć. Z jednej strony jestem zwolennikiem upraszczania kodu, z drugiej jednak do niczego się to nie przyda. Jeśli możliwe byłoby wykonanie kodu [5, 8, 4].sort(), wówczas taka notacja miałaby sens.
  7. Tę zmianę musiałbym zobaczyć na żywo. Teoretycznie jej wprowadzenie zmniejszy zużycie pamięci. Niestety niewiele informacji można znaleźć na ten temat, więc powstrzymam się od jej komentowania.
  8. Coś na czekam z niecierpliwością, odkąd dowiedziałem się, że znajdzie się w PHP. W chwili obecnej, aby korzystać z PHP lokalnie, muszę instalować serwer (najczęściej Apache), a do testowania przygotowanej strony najczęściej muszę ustawić vhosta oraz wprowadzić zmiany w pliku hosts. Dodanie deweloperskiego serwera do PHP pozwoli wywalić zbędne oprogramowanie do kosza i skupić się na programowaniu, a nie na konfigurowaniu. Dwa doskonałe przykłady po co i jak z tego korzystać to Python oraz Ruby, a dokładniej rzecz ujmując Django ora Rails.
  9. Dawno nie korzystałem bezpośrednio z sesji (zawsze miałem od tego framework), więc ta zmiana z mojego punktu widzenia jest bez znaczenia.
  10. Ta zmiana budzie we mnie mieszane uczucia. Jako zwolennik type hint powinienem się cieszyć, że kolejny typ będzie określić na poziomie definicji metody. Jednak w tym przypadku będzie to coś sztucznego. Poza tym dokumentacja jasno stwierdza, że nie powinno polegać się na typie Closure, ponieważ może on ulec zmianie w kolejnych wersjach języka. Czyżby jednak Closure miał zostać z nami na dłużej?

Podsumowując. W ogólnym rozrachunku zmiany oceniam in-plus. Jeśli tylko udałoby się przyspieszyć rozwój języka, byłbym wniebowzięty.

Autor wpisu: sokzzuka, dodany: 17.06.2011 08:46, tagi: php

PHP 5.3.7 Release Candidate 1 jest już gotowe do pobrania i testowania.

Linki:

Autor wpisu: sokzzuka, dodany: 17.06.2011 08:40, tagi: php

W ostatnim wpisie na php.internals, Stas Malyshev przedstawił listę zmian i nowości, nad wprowadzeniem których do PHP 5.4 odbędzie się głosowanie. Oto ich lista:

  1. Dodanie zarezerwowanej przestrzeni nazw „php”
  2. Zarezerwowanie nazw typów prostych jako słów kluczowych (string, int etc) na wypadek, gdyby kiedyś było to potrzebne (type hinting)
  3. Dodanie błędów klasy E_STRICT do klasy E_ALL
  4. Całkowite usunięcie magic_quotes
  5. Binarna notacja dla liczb całkowitych (np 0b10101)
  6. Krótka notacja dla tablic, czyli ['raz','dwa','trzy'] == array(‘raz’,'dwa’,'trzy’)
  7. Nowa opcja w php.ini „disable post data processing”
  8. Wbudowany deweloperski mini serwer www
  9. Możliwość ustawienia klasy, jako sposobu obsługi sesji
  10. Dodanie nowego type hint „callback”, który sprawdzał by, czy argument przekazany do funkcji jest wywoływalny – sprawdzenie dla „Closure”, array($obiekt,’nazwa_metody’), $nazwaFunkcji

Moim zdaniem każda z tych zmian/dodatków ma duży sens i jest  przydatny, chętnie bym wszystkie je widział w kolejnej wersji interpretera. Jedyna rzecz do której mógłbym się przyczepić to punk nr.9 – możliwość ustawienia klasy jako handlera sesji. Wg. mnie ustawienie klasy jest bez sensu i świetnie pokazuje, czym jest tzw COP (Class Oriented Programming). Jeżeli chcemy pisać w duchu OOP (Object Oriented Programming) to handler sesji powinien być ustalany jako obiekt klasy implementującej jakiś interfejs (np. „SessionStorage”).

Co sądzicie o proponowanych zmianach ?

Autor wpisu: Tomasz Kowalczyk, dodany: 17.06.2011 03:50, tagi: symfony, framework

Witajcie. Dzisiaj po raz kolejny zmierzymy się z frameworkiem symfony, a konkretnie z jego "wewnętrznym frameworkiem" obsługującym formularze. Jak już zdążyliście się dowiedzieć z kilku wcześniejszych wpisów, jest on bardzo wygodnym narzędziem, jednak jeśli się o pewnych rzeczach po prostu nie wie, to niestety potrafi być także złośliwy i ogłupia programistę niezrozumiałymi komunikatami. Tak też [...]

Autor wpisu: sokzzuka, dodany: 16.06.2011 23:14, tagi: php

Witajcie ! Jakiś czas minął już od ostatniego wpisu o Scali (3 miesiące), czas więc odświeżyć swoje zainteresowanie i wiedzę na temat tego języka. Dzisiejszym daniem głównym są tzw. case classes. Jest to pewnego rodzaju nowość dla osób przyzwyczajonych do Javopodobnych obiektowych systemów typów. Czym jest więc case class ? Poprzez analogie do innych języków, możemy ją traktować jako typowany kontener na dane – czyli znaną z C/C++ (oraz w troche innym wydaniu w C#) strukturę (struct). Jest to specjalny typ klasy, w przypadku której w konstruktorze deklarujemy listę pól, natomiast kompilator automatycznie generuje nam gettery i settery. Jest to oczywiście wymarzona sytuacja dla wszystkich fanów tego typu „enkapsulacji” (pozdrowienia dla anonimowego „P.” ;P).

Deklaracja:

case class Foo(baz:String, bar:Number)
val myFoo = Foo("test",5)

println(myFoo.baz, myFoo.bar)

Jak można zauważyć w przykładzie nie jest wymagany operator „new” przy tworzeniu nowych instancji case class. Przy okazji pragnę zwrócić uwagę na jeden istotny szczegół – case classa zadeklarowana w sposób pokazany powyżej będzie miała tylko automatycznie wygenerowane gettery. By również settery zostały wygenerowane, należy uzupełnić deklaracje o słowa kluczowe var dla zmiennych, dla których ma być to uczynione.

Przykład:

case class Foo(var baz:String, var baz:Number)
val myFoo = Foo("test",5)

myFoo.baz = "World"

Skoro wiemy już co nieco o case classes, pora powiedzieć kilka słów o pattern matching, by na koniec zgrabnie połączyć oba koncepty. Czym jest więc pattern maching ?

Pattern matching jest to rodzaj uniwersalnego switcha dla języka statycznie typowanego. W Scali używany jest również między innymi w obsłudze wyjątków.

Przykład:

val baz = 10

baz match {
    case 1 => println("raz")
    case 2 => println("dwa")
    case _ => println("default")
}

Jeżeli zadeklarujemy baz jako dowolny typ (Any), mamy możliwość elastycznego matchowania, behold:

val baz:Any = 10

baz match {
    case 1 => println("raz")
    case "2" => println("dwa")
    case _ => println("default")
}

Wyjątki:

def testWyjątków():Unit = {
      throw new Exception("houston mamy problem")
}

try{
    testWyjątków()
} catch {
      case e:Exception => println(e.getMessage)
}

Sytuacja z matchowaniem wyjątków jest podobna jak dla poprzednich przykładów. Smaczkiem jest to, że w nazwach metod (i zapewne klas) możemy używać znaków narodowych – świetna sprawa, przy tworzeniu różnego rodzaju DSL-i.

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

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.