Wybierz inny temat

Różnice pomiędzy wersjami PHP

5.2 -> 5.6

Usunięte rozszerzenia:

  • fbsql - rozszerzenie nie jest już rozwijane
  • fdfmsql
  • ncurses
  • sybase - niekontynuowany, zastąpiony przez sybase_ct
  • mhash - niekontynuowany, zamiast mhash należy używać rozszerzenia hash (w pełni kompatybilnego z mhash)
  • sqlite - natomiast ext/sqlite3 i ext/pdo_sqlite nadal są dostępne


Nowe słowa, których nie można używać jako nazw zmiennych, klas, metod itd.:


Zmiany w zachowaniu (niekompatybilne wstecznie):

  • safe mode nie jest już wspierane
  • usunięto Magic quotes. get_magic_quotes_gpc() i get_magic_quotes_runtime() zawsze zwrócą FALSE set_magic_quotes_runtime() zwraca błąd E_CORE_ERROR
  • dyrektywy php.ini register_globals i register_long_arrays zostały usunięte
  • usunięto algorytmy hashujące Salsa10 i Salsa20, s2k
  • nazwy parametrów dublujące nazwy globalne powodują fatal error. Przykład: function foo($_GET, $_POST) {}
  • break and continue nie przyjmują już zmiennych w argumentach (e.g., break 1 + foo() * $bar;) statyczne argumenty działają nadal, np. break 2;. Niepoprawne stały się break 0 i continue 0
  • nowsze wewnętrzne API parsujące parametry jest stosowane we wszystkich rozszerzeniach PHP 5.3. Wynikiem jego działania jest zwracanie NULL w przypadku otrzymania nieprawidłowych parametrów. Od tej reguły istnieje kilka wyjątków, np. funkcja get_class() nadal zwraca FALSE przy błędzie
  • biblioteka mysqlnd wymaga użycia nowszego (41-bajtowego) formatu hasła MySQL 4.1. Użycie formatu 16-bitowego wywoła błąd  mysql_connect() i podobnych funkcji - "mysqlnd cannot connect to MySQL 4.1+ using old authentication."
  • metoda __toString() nie przyjmuje argumentów
  • funkcje natsort()natcasesort()usort()uasort()uksort()array_flip(), i array_unique() nie akceptują obiektów jako argumentów. Aby zastosować je na obiekcie, obiekt należy najpierw rzutować do tablicy
  • unpack() format a nie usuwa samoczynnie trailing null byte - zachowanie ujednolicone z Perl
  • unpack() format A usuwa samoczynnie trailing ASCII whitespace - zachowanie ujednolicone z Perl
  • case insensitivity staje się niezależne od locale - case insensitive matching jest teraz wykonywany niezależnie od locale, zgodnie z zasadami ASCII. Może to spowodować błędy w kodzie używającym case insensitive matching dla znaków spoza ASCII (w tym UTF-8), takich jak znaki z akcentami
  • crypt() wygeneruje błąd E_NOTICE, jeśli pominięty jest parametr salt
  • w rozszerzeniu date and time nie można już ustawić strefy czasowej używając zmiennej środowiskowej TZ. Timezone należy ustawiać przy pomocy opcji php.ini date.timezone lub funkcji date_default_timezone_set(). PHP w przypadku braku ustawionej strefy przyjmie czas UTC i zgłosi ostrzeżenie
  • cURL - upload z użyciem składni @file jest wspierany tylko z CURLOPT_SAFE_UPLOAD ustawionym na FALSE. Zamiast tego zalecany jest CURLFile
  • zasoby GMP stają się obiektami API nie ulega zmianie, kod pozostaje poprawny, jeśli nie wykonuje explicit check z  uzyciem is_resource() lub podobnej funkcji
  • funkcje Mcrypt wymagają poprawnych kluczy i IV. mcrypt_encrypt(), mcrypt_decrypt(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb(), mcrypt_generic() i mcrypt_ofb() nie akceptują kluczy o niepoprawnych rozmiarach, tryby szyfrów blokowych wymagające IV nie powiodą się, jeśli IV nie będzie podane
  • klucze w tablicach nie będą nadpisywane, kiedy tablice są definiowane jako atrybut klasy poprzez array literal. Szerszy opis na stronie php.net
  • od wersji 5.6 json_decode() odrzuca warianty non-lowercase wartości true, false i null - zgodnie ze specyfikacją JSON - i ustawia odpowiednio json_last_error(). Poprzednio akceptowano input do json_decode() składający się z wyłącznie jednej z tych wartości niezależnie od case (lowercase, uppercase, mixed). Zmiana wpływa tylko na nieprawidłowo sformatowany JSON przekazywany do json_decode(). Poprawny JSON jest parsowany bez zmian
Szczegóły zmian pomiędzy wersjami

5.2 -> 5.3

Usunięte rozszerzenia
  • fbsql - rozszerzenie nie jest już rozwijane
  • fdfmsql
  • ncurses
  • sybase - niekontynuowany, zastąpiony przez sybase_ct
  • mhash - niekontynuowany, zamiast mhash należy używać rozszerzenia hash (w pełni kompatybilnego z mhash)
Zmiany w zachowaniu (niekompatybilne wstecznie)
  • nowsze wewnętrzne API parsujące parametry jest stosowane we wszystkich rozszerzeniach PHP 5.3. Wynikiem jego działania jest zwracanie NULL w przypadku otrzymania nieprawidłowych parametrów. Od tej reguły istnieje kilka wyjątków, np. funkcja get_class() nadal zwraca FALSE przy błędzie
  • clearstatcache() nie usuwa już domyślnie realpath cache
  • realpath() jest od tej wersji niezależne od platformy. Nieprawidłowe ścieżki relatywne, na przykład  __FILE__ . "/../x" nie będą działać
  • funkcje z rodziny call_user_func() propagują $this nawet jeśli wywolującym jest klasa rodzica
  • funkcje natsort()natcasesort()usort()uasort()uksort()array_flip(), i array_unique() nie akceptują obiektów jako argumentów. Aby zastosować je na obiekcie, obiekt należy najpierw rzutować do tablicy
  • zachowanie funkcji z parametrami podawanymi przez referencję wywoływanymi z wartością zmienia się. Wcześniej funkcja zaakceptowałaby wartość zamiast referencji, w wersjach 5.3+ zwróci błąd
  • biblioteka mysqlnd wymaga użycia nowszego (41-bajtowego) formatu hasła MySQL 4.1. Użycie formatu 16-bitowego wywoła błąd  mysql_connect() i podobnych funkcji - "mysqlnd cannot connect to MySQL 4.1+ using old authentication."
  • biblioteka mysqlnd nie odczytuje plików konfiguracyjnych (my.cnf/my.ini) tak jak libmysql. Kod polegający na tej funkcjonalności należy uzupełnić o załadowanie konfiguracji (z użyciem funkcji mysql_options())
  • / (trailing slash) usunięto z SplFileInfo i pokrewnych klas
  • metoda __toString() nie przyjmuje argumentów
  • metody __get()__set()__isset()__unset(), and __call() muszą być publiczne i nie mogą być statyczne. Sygnatury są wymuszane
  • metoda __call() jest wywoływana aby uzyskać dostęp do metod prywatnych i zabezpieczonych
  • func_get_arg()func_get_args() and func_num_args() nie mogą być wywołane z najwyższego scope pliku includowanego za pomocą include lub require z funkcji w pliku wywołującym
  • dodana wastwa emulacyjna rozszerzenia MHASH. Nie obejmuje wszystkich algorytmów (pominięto m.in. s2k). Od PHP 5.3 s2k nie jest dostępne

Poniższe słowa kluczowe są zarezerwowane od wersji 5.3 i NIE można używać ich dla nazw własnych zmiennych, metod itd.

 

5.3 -> 5.4

Usunięte rozszerzenia
  • sqlite - natomiast ext/sqlite3 i ext/pdo_sqlite nadal są dostępne
Zmiany w zachowaniu (niekompatybilne wstecznie)
  • safe mode nie jest już wspierane
  • usunięto Magic quotes. get_magic_quotes_gpc() i get_magic_quotes_runtime() zawsze zwrócą FALSE set_magic_quotes_runtime() zwraca błąd E_CORE_ERROR
  • dyrektywy php.ini register_globals i register_long_arrays zostały usunięte
  • usunięto przekazywanie przez referencję w momencie wywołania metody
  • break and continue nie przyjmują już zmiennych w argumentach (e.g., break 1 + foo() * $bar;) statyczne argumenty działają nadal, np. break 2;. Niepoprawne stały się break 0 i continue 0
  • w rozszerzeniu date and time nie można już ustawić strefy czasowej używając zmiennej środowiskowej TZ. Timezone należy ustawiać przy pomocy opcji php.ini date.timezone lub funkcji date_default_timezone_set(). PHP w przypadku braku ustawionej strefy przyjmie czas UTC i zgłosi ostrzeżenie
  • nienumeryczny offset stringa -np. $a['foo'] gdzie $a jest stringiem - zwraca false przy isset() i true przy empty(), przy próbie użycia generuje E_WARNING. Offsety o typach double, bool i null generują E_NOTICE. Offsety numeryczne działają bez zmian. Offset typu '12.3' i '5 foobar' generują E_WARNING, ale są konwertowane odpowiednio do 12 i 5 ze względu na kompatybilność wsteczną
  • konwersja tablicy do stringa wygeneruje E_NOTICE, ale rezultatem będzie string "Tablica"
  • nazwy parametrów dublujące nazwy globalne powodują fatal error. Przykład: function foo($_GET, $_POST) {}
  • usunięto algorytmy hashujące Salsa10 i Salsa20

Poniższe słowa kluczowe są zarezerwowane od wersji 5.4 i NIE można używać ich dla nazw własnych zmiennych metod itd.

 

5.4 -> 5.5

Zmiany w metodach
Zmiany w zachowaniu (niekompatybilne wstecznie)
  • case insensitivity staje się niezależne od locale - case insensitive matching jest teraz wykonywany niezależnie od locale, zgodnie z zasadami ASCII. Może to spowodować błędy w kodzie używającym case insensitive matching dla znaków spoza ASCII (w tym UTF-8), takich jak znaki z akcentami

 

5.5 -> 5.6

Zmiany w metodach
Zmiany w zachowaniu (niekompatybilne wstecznie)
  • funkcje Mcrypt wymagają poprawnych kluczy i IV. mcrypt_encrypt(), mcrypt_decrypt(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb(), mcrypt_generic() i mcrypt_ofb() nie akceptują kluczy o niepoprawnych rozmiarach, tryby szyfrów blokowych wymagające IV nie powiodą się, jeśli IV nie będzie podane
  • zasoby GMP stają się obiektami API nie ulega zmianie, kod pozostaje poprawny, jeśli nie wykonuje explicit check z  uzyciem is_resource() lub podobnej funkcji
  • klucze w tablicach nie będą nadpisywane, kiedy tablice są definiowane jako atrybut klasy poprzez array literal. Szerszy opis na stronie php.net
  • od wersji 5.6 json_decode() odrzuca warianty non-lowercase wartości true, false i null - zgodnie ze specyfikacją JSON - i ustawia odpowiednio json_last_error(). Poprzednio akceptowano input do json_decode() składający się z wyłącznie jednej z tych wartości niezależnie od case (lowercase, uppercase, mixed). Zmiana wpływa tylko na nieprawidłowo sformatowany JSON przekazywany do json_decode(). Poprawny JSON jest parsowany bez zmian
Czy artykuł rozwiązał problem?
Tak Nie