PHP 7.4 – co nowego (wydajność)
PHP 7.4
Już niedługo, bo 28 listopada 2019 roku, zostanie wydana aktualizacja najpopularniejszego języka skryptowego – PHP 7.4. Niesie ona ze sobą wiele istotnych zmian, nowych funkcji i poprawek składni mających na celu ulepszenie aktualnej podstawy. Jeżeli tak jak inni zastanawiasz się, co nowego przyniesie najnowsza wersja PHP, ten wpis jest dla Ciebie!
Na samym początku trzeba oczywiście zaznaczyć, że dla większości posiadaczy stron internetowych najważniejsze nie będą same zmiany w kodzie, ale to, jak PHP 7.4 wpłynie na wydajność witryn.
Z odpowiedzią musimy zaczekać aż do wydania oficjalnej aktualizacji, ale analizując wersję beta i RC1, można zakładać, że dzięki najnowszej wersji, PHP będzie jeszcze szybsze i jeszcze bardziej niezawodne niż wcześniej!
Kontynuując tradycję , której trzymamy się od kilku lat, w tym artykule pokażemy co nowego w PHP 7.4. Przedstawimy w nim główne nowości i najważniejsze zmiany oraz przyjrzymy się temu, jak najnowsza wersja wpływa na wydajność stron internetowych. Na koniec pokażemy też, jak zmienić wersję PHP na swojej stronie.
Warto wiedzieć: JCHost.pl jest pierwszą firmą hostingową w Polsce, która z dniem 20 października 2019 roku wprowadziła obsługę PHP 7.4 (RC4) na swoich serwerach.
Wydajność PHP 7.4 w porównaniu z 5.6, 7 i 7.2
O tym, jak ważna jest szybko ładująca się strona nie trzeba wiele mówić. Każdy z nas wie, że im krótszy czas ładowania się witryny, tym większe zadowolenie użytkownika i sprzedaż. Analizując wydajność PHP 7.4, można dojść do wniosku, że przejście ze starej wersji PHP na nową może znacząco skrócić wspomniany czas ładowania.
Poniższy wykres prezentuje wyniki testów wykonanych przez zespół phoronix.com. Opierały się one na sprawdzeniu PHP Benchmark Suite we frameworku PhpBench i zostały wykonane na serwerze AMD EPYC 7742 2P.
Celem testu było sprawdzenie wydajności najnowszej wersji PHP 7.4 (RC1) z przeszłymi wersjami: 5.6.x, 7.0.x, 7.1 oraz 7.2.x.
Wynik benchmark dla wersji 7.4 (RC1):
- 187% wyższy niż PHP 5.6.40
- 38% wyższy niż PHP 7.0.33
- 7% wyższy niż PHP 7.2.22
Sprawdź najszybszy na rynku hosting WordPress oraz hosting Ecommerce z PHP 7.4.
Co nowego w PHP 7.4
Tak jak każda większa aktualizacja języka PHP, również wersja 7.4 zawiera sporą liczbę ekscytujących nowości. W tej części artykułu przedstawimy więc najważniejsze funkcje, które zostaną wprowadzone w niniejszej aktualizacji i szczegółowo je omówimy.
Oto, co nowego w PHP 7.4:
Operator rozkładania w tablicach (spread)
Wraz z aktualizacją PHP 7.4, w wyrażeniach macierzowych możemy używać operatora rozkładania (z ang. spread operator)’, który jest o wiele szybszy niż array_merge
. Dzięki temu znacznie zwiększymy wydajność naszej aplikacji. Chociaż sam operator rozkładania został wprowadzony już w PHP 5.6, teraz jest on dostępny również dla wyrażeń tablicowych.
Oto przykład zastosowania spread operatora w wyrażeniu tablicowym:
$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$arr3 = [...$arr1, ...$arr2];
$arr4 = [...$arr1, ...$arr3, 7, 8, 9];
Zwroty kowariantne i parametry przeciwstawne
Wariancja (z ang. variance) jest właściwością hierarchii klas opisującą, w jaki sposób typy konstruktorów wpływają na nadtypy i podtypy. Od teraz typ parametru możemy zastąpić jednym z jego nadtypów, a typ zwracany możemy zastąpić jednym z podtypów, oraz dodatkowo mamy możliwość użycia typów współzmiennych.
Oto przykład kowariancyjnego typu zwrotu:
interface Factory {
function make(): object;
}
class UserFactory implements Factory {
function make(): User;
}
Oto przykład przeciwstawnego typu parametrów:
interface Concatable {
function concat(Iterator $input);
}
class Collection implements Concatable {
// accepts all iterables, not just Iterator
function concat(iterable $input) {/* . . . */}
}
Wsparcie dla właściwości wpisanych
Programistom PHP od dawna brakowało wsparcia dla tzw. właściwości wpisanych (z ang. typed properties). Korzystając z nich, możemy w prosty sposób zadeklarować podpowiedzi dla zmiennych i właściwości klas. Wcześniej nie było to możliwe, co zmuszało nas do tworzenia dodatkowych metod.
Oto przykład starego kodu:
Class User {
/** @var int $id */
private $id;
/** @var string $name */
private $name;
public function __construct(int $id, string $name) {
$this->id = $id;
$this->name = $name;
}
public function getId(): int {
return $this->id;
}
public function setId(int $id): void {
$this->id = $id;
}
public function getName(): string {
return $this->name;
}
public function setName(string $name): void {
$this->name = $name;
}
}
Oto przykład przy wykorzystaniu właściwości wpisanych:
class User {
public int $id;
public string $name;
public function __construct(int $id, string $name) {
$this->id = $id;
$this->name = $name;
}
}
Funkcje strzałek 2.0 (krótkie zamknięcia)
W PHP anonimowe funkcje (z ang. anonymous functions) są uważane za trudne do wdrożenia i utrzymania. W najnowszej aktualizacji zaproponowano wprowadzenie krótszej i łatwiejszej składni funkcji strzałek, potocznie krótkich zamknięć, które powinny znacząco ułatwić nam oczyszczanie kodu.
Oto przykład starego kodu:
array_map(function (User $user) {
return $user->id;
}, $users)
Oto przykład z użyciem krótkich zamknięć:
array_map(fn (User $user) => $user->id, $users)
Operator zerowej koalescencji
Aby pomóc programistom w pisaniu bardziej intuicyjnego i łatwiejszego w utrzymaniu kodu, PHP 7.4 wprowadza operator zerowego przypisywania koalescencji ?? =
. Funkcja ta jest niezwykle przydatna, gdy musimy użyć operatora trójskładnikowego w połączeniu z isset()
.
Oto przykład starego kodu:
$someArray[\'key\'] = $someArray[\'key\'] ?? \'someValue\';
Oto przykład z wykorzystaniem zerowej koalescencji:
$someArray[\'key\'] ??= \'someValue\';
Słabe referencje (WeakReference)
Najnowsza wersja PHP wprowadza klasę ‘WeakReference’, która pozwala nam zachować odniesienie do poszczególnych obiektów, co nie zapobiega ich zniszczeniu. Aby skorzystać ze słabych referencji, będziemy potrzebować rozszerzenia takiego jak np. pecl-poorref.
Oto przykład zapisu słabej referencji:
<?php
$obj = new stdClass;
$weakref = WeakReference::create($obj);
var_dump($weakref->get()); // object(stdClass)#1 (0) {}
unset($obj);
var_dump($weakref->get()); // NULL
?>
Serializacja niestandardowych obiektów
Do tej pory mogliśmy korzystać z dwóch różnych mechanizmów niestandardowej serializacji obiektów: metod __sleep()
i __wakeup()
oraz interfejsu ‘Serializable’. Według autora pomysłu nowej funkcji – Nikity Popowa, obie te metody prowadzą jednak do złożonego i zawodnego kodu. Stąd też w PHP 7.4 zostaną wprowadzone dwie zupełnie nowe metody: __serialize()
i __unserialize()
.
Ładowanie wstępne
Korzystając z PHP mamy możliwości konfiguracji OPCache w celu uzyskania lepszej wydajności. Silnik ten najpierw kompiluje pliki kodu, a następnie zapisuje je w pamięci, aby uniknąć zbędnego powtórzenia kompilacji na późniejszych etapach. Ta koncepcja nazywana jest również ładowaniem wstępnych (z ang. preloading), a wraz z nadejściem PHP 7.4, została rozszerzona.
Od teraz, aby przeprowadzić preloading, możemy określić pojedynczą dyrektywę opcache.preload w pliku PHP.ini i podać ścieżkę dowolnego pliku PHP. Dzięki temu, wyselekcjonowane pliki będą ładowane podczas uruchamiania serwera, zostaną wykonane przed dowolną aplikacją i pozostaną dostępne dla wszelkich przyszłych żądań.
Inne zmiany w PHP 7.4
Nie można zapominać, że każda nowa wersja PHP wiąże się nie tylko z nowościami, ale również zmianami niektórych elementów. Większość zmian w wersji 7.4 nie ma charakteru łamliwego, ale niektóre mogą mieć wpływ na podstawę kodu.
Oto inne zmiany wprowadzone w PHP 7.4:
Zezwolenie na wyjątki w __toString
Wcześniej nie można było umieszczać wyjątków w __toString
. Były one zabronione z powodu obejścia niektórych przestarzałych mechanizmów obsługi błędów. Okazało się jednak, że takie podejście nie rozwiązuje problemu. Od teraz możemy więc zgłaszać wyjątki w __toString
.
Array_merge bez argumentów
Od czasu dodania operatora ‘Spread’ zdarzały się przypadki, w których programiści uznawali za stosowane użycie array_merge
. Aby obsłużyć wyjątki, w których $arrayOfArrays
byłby pusty, od teraz array_merge
oraz array_merge_recursive
pozwalają na dodanie pustej listy parametrów.
Powiadomienia o dostępie do tablicy
Do tej pory, w momencie użycia składni dostępu do tablicy na liczbie całkowitej, PHP zwracało null
. Od teraz dostaniemy o tym powiadomienie wyglądające mniej więcej tak:
$i = 1;
$i[0]; // powiadomienie
Ulepszenia proc_open
Wprowadzono również zmiany w funkcji proc_open
w celu umożliwienia wykonywania programów bez przechodzenia przez tzw. powłokę. Od teraz będzie się to odbywać poprzez przekazanie tablicy zamiast łańcucha dla polecenia.
ext-hash
domyślnie włączony
Rozszerzenie ext-hash
będzie od teraz stale dostępne i aktywne we wszystkich instalacjach PHP.
PEAR domyślnie wyłączony
Jako że PEAR nie jest już aktywnie utrzymywany, po tej aktualizacji został on usunięty z domyślnej instalacji.
Ulepszenia password_hash
W PHP 7.4 wprowadzono obsługę argon2i i argon2id mieszanie, w momencie, gdy PHP zostało skompilowane bez libargon.
Inne zmiany
Gdyby tego było mało, PHP 7.4 przynosi ze sobą o wiele, wiele więcej zmian. Wyróżniliśmy kilka, które mogą wpłynąć na funkcjonowanie naszych programów.
Oto pozostałe zmiany w PHP 7.4:
- Wywołanie
var_dump
na instancjiDateTime
lubDateTimeImmutable
nie pozostawi za sobą dostępnych właściwości obiektu. openssl_random_pseudo_bytes
zgłosi wyjątek w sytuacji błędów.- Próba serializacji w przypadku instancji
PDO
lubPDOStatement
wygenerujeException
zamiastPDOException
. - Wywoływanie
get_object_vars()
na instancjiArrayObject
zwróci jej właściwości, a nie właściwości zwiniętej tablicy lub obiektu.
Wycofania PHP 7.4
Oprócz wielu ekscytujących nowości, najnowsza wersja PHP wycofuje niektóre funkcje i funkcjonalności, które zostały uznane za przestarzałe lub nieprzydatne. Powinny one posłużyć programistom jako powiadomienie, że dany element zostanie w przyszłości usunięty lub zmieniony.
Oto funkcje, które zostały wycofane w PHP 7.4:
Nawiasy klamrowe dla dostępu do tablicy i łańcucha
Wcześniej mogliśmy uzyskać dostęp do tablic i ciągów łańcucha za pomocą nawiasów klamrowych. Po aktualizacji do najnowszej wersji, ta funkcjonalność została wycofana:
$array{1};
$string{3};
Lewostronny operator trójskładnikowy
Operator trójskładnikowy w języku PHP był uważany przez wielu programistów za dziwaczny, ponieważ w przeciwieństwie do wielu innych języków, jest lewostronny. W wersji PHP 7.4, funkcjonalność ta została uznana za przestarzałą:
1 ? 2 : 3 ? 4 : 5 ; // przestarzałe
(1 ? 2 : 3) ? 4 : 5; // ok
1 ? 2 : (3 ? 4 : 5); // ok
Inne wycofania
Oprócz wyżej wymienionych funkcji, PHP 7.4 wycofuje również szereg innych funkcjonalności, dyrektyw, metod i typów.
Oto lista pozostałych wycofań i przestarzałych elementów:
- typ
real
- wywoływanie
parent::
w klasie bez rodzica array_key_exists()
z obiektami- filtr
FILTER_SANITIZE_MAGIC_QUOTES
- metody
export()
mb_strrpos()
z kodowaniem jako trzecim argumentem- różnica kolejności parametrów
implode()
- wyodrębnienie
$this
od zamknięć niestatycznych - dyrektywa
allow_url_include
- funkcje
hebrevc()
,convert_cyr_string()
,money_format()
,ezmlm_hash()
,restore_include_path()
Jak zmienić wersję PHP?
Ustawienie PHP 7.4 jest banalnie proste! Wystarczy zalogować się do panelu hostingowego, a następnie zmienić aktualną wersję PHP na nową. Cała operacja wymaga dosłownie 5 kliknięć i trwa nie więcej niż 30 sekund.
Warto wiedzieć: Zmiana wersji PHP w witrynie internetowej nie wymaga tworzenia backupu. W razie wystąpienia problemów lub błędów HTTP po aktywacji PHP 7.4, wystarczy zmienić wersję na tę, która była używana wcześniej.
Krok 1
Zaloguj się do swojego panelu hostingowego, najedź na zakładkę „Dodatkowe funkcje” i kliknij w opcję „Select PHP version”.
Krok 2
Z pola wyboru „PHP version” wybierz wartość „7.4” i kliknij przycisk „Set as current”.
Dalsza konfiguracja
Warto też dodać, że na serwerach JCHost.pl umożliwiamy klientom indywidualne ustawienia parametrów php.ini. Dzięki temu programiści mogą czerpać wszelkie korzyści z PHP 7.4 i jego najnowszych funkcji:
Tak natomiast wygląda pełna specyfikacja po konfiguracji PHP 7.4 dostępna pod adresem /info.php/ :
Odbieramy telefony, odpisujemy na maile, nie ukrywamy kosztów, a dodatkowo oferujemy najszybsze pakiety hostingowe na rynku. Uważasz, że to zwroty marketingowe? Sprawdź sam/a!
Jeśli nie będziesz zadowolony/a, zwrócimy Ci pieniądze.
Twoje strony i sklepy przeniesiemy za darmo!
Jeżeli masz jakiekolwiek pytania, skontaktuj się z nami! Kliknij tutaj.
Chcesz dowiedzieć się o nas trochę więcej? Przejdź na stronę JCHost.pl.