Autor wpisu: Tomasz Kowalczyk, dodany: 19.06.2011 16:04, tagi: javascript, jquery, mysql, php
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):
- Dodanie zarezerwowanej przestrzeni nazw “php”.
- Zarezerwowanie nazw typów prostych jako słów kluczowych (string, int etc) na wypadek, gdyby kiedyś było to potrzebne (type hinting).
- Dodanie błędów klasy E_STRICT do klasy E_ALL.
- Całkowite usunięcie magic_quotes.
- Binarna notacja dla liczb całkowitych (np 0b10101).
- Krótka notacja dla tablic, czyli ['raz','dwa','trzy'] == array(‘raz’,’dwa’,’trzy’).
- Nowa opcja w php.ini “disable post data processing”.
- Wbudowany deweloperski mini serwer www.
- Możliwość ustawienia klasy, jako sposobu obsługi sesji.
- 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.
- 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.
- Szkoda, że tylko zarezerwowanie, a nie wprowadzenie type hint. Niemniej pozwala to mieć nadzieję na przyszłość.
- Zmiana raczej kosmetyczna, z której będą cieszyć się puryści PHP, dla których “ordnung muss sein”.
- Nie pamiętam kiedy ostatni raz z tego korzystałem, więc z mojej perspektywy nie ma to żadnego znaczenia.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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:
- Dodanie zarezerwowanej przestrzeni nazw „php”
- Zarezerwowanie nazw typów prostych jako słów kluczowych (string, int etc) na wypadek, gdyby kiedyś było to potrzebne (type hinting)
- Dodanie błędów klasy E_STRICT do klasy E_ALL
- Całkowite usunięcie magic_quotes
- Binarna notacja dla liczb całkowitych (np 0b10101)
- Krótka notacja dla tablic, czyli ['raz','dwa','trzy'] == array(‘raz’,'dwa’,'trzy’)
- Nowa opcja w php.ini „disable post data processing”
- Wbudowany deweloperski mini serwer www
- Możliwość ustawienia klasy, jako sposobu obsługi sesji
- 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
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.