publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
19 skomentuj »

TAGI: php , php 5.3

2011-05-11 11:37  |  Tomasz Smykowski

Najważniejsze nowości w PHP 5.3: jak uniknąć niekompatybilności i jak wykorzystać nowinki

Najważniejsze nowości w PHP 5.3: jak uniknąć niekompatybilności i jak wykorzystać nowinki

Choć PHP 5.3 jest już trochę dostępne na rynku, to wciąż wiele firm hostingowych (również ze ścisłej czołówki) nie spieszyło się z udostępnieniem tego interpretera swoim klientom. Teraz, przy okazji uruchomienia PHP 5.3 w jednej z największych firmy hostingowych w Polsce, warto przygotować się na nowości, które wkrótce podbiją serwery na całym świecie. Przedstawiamy listę tych najważniejszych, ale też mniej popularnych, które przydadzą się w codziennej pracy webmastera.

Spis treści

  1. Niekompatybilności
  2. Nowości
  3. Zmiany w SAPI
  4. Funkcje, klasy i metody
  5. Przestrzenie nazw
  6. Słowo kluczowe „use”
  7. Aliasy przestrzeni nazw
  8. Inne możliwości przestrzeni nazw
  9. Późne, statyczne łączenie
  10. Operator skoków goto
  11. Domknięcia

PHP 5.3.0 zostało wydane w czerwcu 2009 roku, a w połowie grudnia 2010 roku wraz z wydaniem wersji 5.2.16 oficjalnie zakończyło się wsparcie dla wersji 5.2.*. Wdrożenie nowej wersji PHP wymaga czasu - wersja 5.2 potrzebowała dwóch lat od wydania, aby została zainstalowana na większej liczbie serwerów niż dotychczasowe wersje.

Teraz, kiedy minęło niemal pół roku od rozpoczęcia serii 5.3.*, warto zacząć korzystać z nowej wersji. Ale zanim to zrobisz, przeczytaj ten tekst, aby zobaczyć, jakie zmiany w PHP zostały wprowadzone, jak możesz z nich skorzystać i na co trzeba zwrócić szczególną uwagę. A wszystko po to, aby uczynić proces migracji sprawniejszym


Niekompatybilności

Programiści PHP 5.3 uważają, że większość nowości nie spowoduje potrzeby zmian w kodzie – jednak część nowych możliwości nie będzie kompatybilna ze starszymi wersjami PHP. W związku z tym, jeśli używasz ich w kodzie – musisz zwrócić na nie szczególną uwagę. Oto najważniejsze nowości, które będą niekompatybilne z wcześniejszymi wersjami PHP.

  • Nowe wewnętrzne API. Parsowanie parametrów zostało zaimplementowane we wszystkich rozszerzeniach dostępnych w PHP 5.3.x – w związku z tym każda funkcja, w której podamy złą listę parametrów, będzie zwracać NULL. Wyjątkiem jest funkcja get_class(), która zwróci false.

  • realpath() jest całkowicie wieloplatformowe. W efekcie standaryzacji niepoprawne ścieżki (jak /var/test/…/x) przestaną działać.

  • Funkcje sortowania natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip(), array_unique() nie przyjmą jako argumentu tablicy opakowanej w obiekt. Przed przekazaniem musisz zrzutować obiekt na tablicę.

  • Jeżeli funkcja deklaruje, że przyjmuje referencje do zmiennych, to podanie jej wartości poskutkuje błędem krytycznym. Każdą wartość trzeba przypisać do zmiennej przed przekazaniem do funkcji.


Nowości

Lista nowości w PHP 5.3 jest obszerna, dlatego wybraliśmy te najważniejsze – przy okazji zobaczysz, jak możesz wykorzystać je praktycznie.

Ze zmian będą zadowoleni programiści pracujący w systemie Windows. PHP 5.3 wspiera w wersji okienkowej między innymi:

  • sprawdzanie rekordów DNS dla hosta albo adresu IP za pomocą funkcji checkdnsrr,

  • wyszukiwanie plików pasujących do określonego szablonu za pomocą funkcji fnmatch,

  • pobieranie opcji z listy parametrów linii poleceń za pomocą getopts,

  • pobieranie indeksu koloru na obrazku najbliżej podanych parametrów za pomocą imagecolorclosesthwb,

  • konwersję między maszynowym i ludzkim zapisem adresów IP za pomocą inet_ntop i inet_pton,

  • manipulację skrótami dzięki funkcjom link(), linkinfo() i readlink() i symlink(),

  • tworzenie par gniazd do komunikacji między procesami za pomocą socket_create_pair() i stream_socket_pair(), z których pierwsza została wycofana w wersji 4.3.0 z powodu błędu,

  • nanodrzemki za pomocą funkcji time_nanosleep i oczekiwanie do określonego czasu za pomocą time_sleep_until().

Zmiany te zapewniają lepszą kompatybilność i ułatwią Ci pracę nad projektami, jeżeli masz środowisko testowe na Windows, a serwer na Linuksie.

«poprzednia 1 2 3 4 następna »

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
19 skomentuj »

Komentarze

  • Kocurro

    #1 Kocurro 2011-05-11 14:51:00 0

    Odnośnie domknięć to komuś się trochę pomyliło, domknięcia a funkcje anonimowe to dwa różne byty.

    IP: 212.191.87.[...] Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24

  • zeit

    #2 zeit 2011-05-11 23:49:01 0

    W przykladzie "Późne, statyczne łączenie" zamiast:

    public static function zapytaj() { ktoTy(); }

    powinno byc:

    public static function zapytaj() { self::ktoTy(); }

    oraz zamiast:

    class KlasaDziedziczaca

    powinno byc:

    class KlasaDziedziczaca extends KlasaBazowa

    IP: 94.231.60.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24

  • tomaszs

    #3 tomaszs® 2011-05-11 23:55:47 0

    @zeit

    Słusznie, dzięki.

    IP: 89.74.21.[...] Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • hipertracker

    #4 hipertracker® 2011-05-12 00:36:03 0

    @Kocurro w tym wypadku to jedno i to samo. Dobrano tu słabe i paskudnie wyglądające przykłady. Żaden szanujący się developer nie używa takich (polskich) nazw.



    $fun = function () use (&$msg) { $msg = "Bye"; };

    $msg = "Hello";

    $fun(); # zmienia kontekst na zewnątrz closure

    echo $msg; # => Bye
    Użycie & dla zmiennej w use nie tylko tworzy referencję ale także powoduje late binding. Zmienna $msg nie musi istnieć w momencie definicji domknięcia.

    IP: 78.16.31.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24

  • hipertracker

    #5 hipertracker® 2011-05-12 01:00:47 0

    PHP 5.3 ma pełne closures. To jedna z najlepszych zmian jakie weszły do PHP. Dzięki temu jest możliwe zaimplementowanie np. takiego cache'a jaki jest używany w Rails 3. Używam takiego API nagminnie. Wymieniony niżej fetch() zwraca wynik kodu przekazany do domknięcia. Ten kod się wykonuje raz i jest buforowany przez Memcached. Jeśli wygaśnie to sam się wykona ponownie i Memcached zostanie automatycznie zaktualizowany. Wynik jest oczywiście zwracany do zmiennej x. Można przekazać do szablonu lub cokolwiek.

    Ruby:

    param, context = 'foo', 'Hello World'

    x = Rails.cache.fetch("test-#{param}"), :expires_in => 10.minutes do

    # ciężkie obliczenia

    "zwracane wyrażenie dla #{context}"

    end

    i odpowiednik w PHP:

    list($param, $context) = array('foo', 'Hello World');

    $x = Cache::fetch("test-$param", array('expires_in' => 10*60)), function () use($context) {

    # ciężkie obliczenia

    return "zwracane wyrażenie dla $context";

    });

    IP: 78.16.31.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24

  • leszlo

    #6 leszlo 2011-05-17 18:56:47 0

    @hipertracker® "Żaden szanujący się developer nie używa takich (polskich) nazw."

    I dlatego amerykanie mogą napisać facebook-a a my co najwyżej gry na facebook-a.

    Reszta świata musi się mentalnie dostosować do ich sposobu myślenia.

    I jak widać "na załączonym obrazku" robi(sz) to dobrowolnie.

    IP: 83.11.211.[...] Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • murwazy

    #7 murwazy® 2011-05-18 08:24:53 0

    leszlo ale taki jest swiat i nic nie poradzisz, we wlasnym interesie powinienes programowac po angielsku :)

    IP: 89.79.188.[...] Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.8.131 Version/11.10

  • hipertracker

    #8 hipertracker® 2011-05-18 12:42:24 0

    @leszlo: nie zrozumiałeś. Chodzi o unikanie polskich nazw dla zmiennych i funkcji. A jeśli ktoś już bardzo się upiera to niech idzie nacałość, bo w php można tworzyć nazwy z polskimi znakami. np. function grzegżółka($wartość) {...}. Co do komentarzy, to bym się już nie upierał, zwłaszcza że próbka kodu była tylko podana jako ilustracja problemu na polskim portalu.

    IP: 212.17.52.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • tomaszs

    #9 tomaszs® 2011-05-18 13:24:57 0

    @hipertracker

    Polskich znaków w nazwach funkcji lepiej nie używać, ale dlaczego nie nazywać ich po polsku bez polskich znaków? Jak pracujesz w międzynarodowej firmie albo dla takiej to wiadomo, zresztą czasem polityka firmy określa w jakim jezyku mają być nazywane zmienne, ale jeżeli piszesz normalny kod na polski rynek to ja nie widzę powodu dlaczego miałbyś utrudniać sobie życie pisząc wszystko po angielsku, tym bardziej, że z tą znajomością angielskiego to różnie bywa wbrew pozorom. I dostajesz później kod w którym zmienne mają angielskie, idiotyczne nazwy, które nie mają żadnego znaczenia. Ale czekam na argumenty za angielskimi nazwami, odświeżmy dyskusję na ten temat :)

    IP: 89.74.21.[...] Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • murwazy

    #10 murwazy® 2011-05-18 13:47:23 0

    tomaszs® nigdy nie wiesz gdzie trafi Twoj kod, moze bedziesz mial mozliwosc sprzedania go zagranicznej firmie? moze bedziesz chcial zatrudnic kodera zza szeroko pojetej wschodniej granicy zeby ograniczyc koszty? powiedz, po co robic sobie dodatkowa prace albo wrecz zamykac rozne drogi? :-)

    co do jezyka angielskiego, programista bez znajomosci tego jezyka (pewnie wystarczy czytac ze zrozumieniem i potrafic wyszukiwac informacje) zawsze bedzie kilka lat w plecy

    IP: 89.79.188.[...] Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.8.131 Version/11.10

  • hipertracker

    #11 hipertracker® 2011-05-18 14:07:07 0

    Generalnie używanie polskawych nazw dla zmienych, klas i funkcji (pomijając niemożność kontynuowanbia rozwoju kodu dla kogoś kto nie zna polskiego,) wygląda po prostu jak kupa. Dlatego napisałem, że jak ktoś bardzo się upiera aby stworzyć kod z definicji dla jakiegoś polskiego getta, to niech idzie na całość i konsekwentnie używa też polskich znaków.

    IP: 212.17.52.[...] Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • tomaszs

    #12 tomaszs® 2011-05-18 15:01:35 0

    @murwazy

    Czy zatrudniałeś kiedyś kodera zza granicy? Czy sprzedałeś kiedyś kod komuś zza granicy?

    IP: 89.74.21.[...] Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • tomaszs

    #13 tomaszs® 2011-05-18 15:06:58 0

    @hipertracker

    Wszystko po angielsku brzmi lepiej. Jak myślisz dlaczego?

    IP: 89.74.21.[...] Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • murwazy

    #14 murwazy® 2011-05-18 15:41:50 0

    tomaszs® - 2x tak.

    znam calkiem sporo ludzi, ktorzy pracuja dla zagranicznej firmy jako podwykonawcy albo maja klientow zzagranicy. jest 21 wiek, globalna wioska itd :)

    IP: 89.79.188.[...] Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.8.131 Version/11.10

  • tomaszs

    #15 tomaszs® 2011-05-18 16:41:12 0

    @murwazy

    No i dobrze, jeżeli pracujesz w takich warunkach i Twoi znajomi też to nie ma w ogóle o czym gadać. Ale nie ma co przesadzać i jak kodujesz bez realnych perspektyw na sprzedaż za granicę i nie będziesz miał w teamie osób z innych krajów to nie ma co na siłę używać angielskiego. No chyba że po to, żeby kod był bardziej cool. bo jak wiadomo w języku angielskim wszystko brzmi lepiej. W ogóle ta dyskusja zainspirowała mnie do napisania postu na blogu: http://polishwords.com.pl/blog/2011/co-brzmi-lepiej-po-angielsku/

    IP: 89.74.21.[...] Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • murwazy

    #16 murwazy® 2011-05-19 08:50:51 0

    tomaszs® moim zdaniem lepiej wyrabiac sobie dobre nawyki bez stresu, no ale chyba pozostaniemy przy swoich zdaniach :-) pzdr

    IP: 89.79.188.[...] Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.8.131 Version/11.11

  • Michcio

    #17 Michcio 2011-05-26 07:15:51 0

    też uważam, że trzeba wyrabiać w sobie nawyki pisania nazw zmiennych i funkcji po angielsku. Nawet jeśli Twój kod nie zostanie sprzedany za granicę i tylko Ty będziesz w nim grzebał, to w przyszłości, gdy zostaniesz zatrudniony w międzynarodowej firmie albo będziesz musiał w taki czy inny sposób współpracować z ludźmi gdzie tylko język angielski będzie wchodził w grę, to zostaniesz z ręką w nocniku, bo z przyzwyczajenia będziesz nazywał te zmienne po polsku:)

    IP: 46.21.213.[...] Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • tomaszs

    #18 tomaszs® 2011-05-29 09:04:35 0

    @murwazy

    Póki co tak :)

    IP: 89.74.21.[...] Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

  • tomaszs

    #19 tomaszs® 2011-05-29 09:06:25 0

    @Michcio

    A nuż filozofia :)

    IP: 89.74.21.[...] Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

Uwaga! Możesz zarejestrować się w serwisie i w ten sposób zarezerwować swój nick oraz ominąć konieczność ciągłego odczytywania wyrazów.

Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka (słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.

Polecane książki

Czytaj Webhosting

Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.

Zarejestruj domenę

Sprawdź dostępność swojej domeny:

.pl: 0 zł   .com: 19.90 zł
.com.pl: 0 zł   .eu: 19.90 zł