PHP / Magento Dev Blog

  • Publikacje
  • O autorze
  • Kontakt

PHP 7.2 – object type hint, sodium zamiast mcrypt, deprecacje

by Henryk Tews / poniedziałek, 09 lipca 2018 / Opublikowano w PHP

PHP 7.2 wyszło w listopadzie 2017 roku, ale w praktyce wiele projektów migruje na tę wersję dopiero teraz. Jeśli nadal siedzisz na 7.0 lub 7.1 – ten wpis jest dla Ciebie. Przeglądam najważniejsze zmiany, które realnie wpływają na codzienny kod.

1. Typowanie obiektów w parametrach i zwracanych wartościach

PHP 7.2 jako pierwsza wersja pozwala na użycie object jako type hint. Brzmi prosto, a w praktyce bardzo porządkuje interfejsy, które przyjmują dowolne obiekty:

<?php

// Przed PHP 7.2 – brak type hinta, musisz sprawdzać ręcznie
function logObject($obj): void {
    if (!is_object($obj)) {
        throw new \InvalidArgumentException('Expected object');
    }
    // ...
}

// PHP 7.2 – type hint "object" robi to za Ciebie
function logObject(object $obj): void {
    // jeśli przekażesz coś innego niż obiekt, dostaniesz TypeError
    echo get_class($obj);
}

Szczególnie przydatne przy pisaniu generycznych helperów logujących, serializujących lub mapujących dane z zewnętrznych API.

2. Rozszerzenie typów parametrów (contravariance)

To subtelna, ale ważna zmiana. W PHP 7.2 możesz rozszerzyć type hint parametru w klasie potomnej – czyli zastąpić bardziej szczegółowy typ bardziej ogólnym. Przed 7.2 PHP rzucał błąd.

<?php

class Collection {}
class SpecialCollection extends Collection {}

class ParentHandler {
    public function handle(SpecialCollection $c): void {}
}

// PHP 7.2: można poszerzyć typ do Collection lub object
class ChildHandler extends ParentHandler {
    public function handle(Collection $c): void {}
}

W Magento 2 będziesz na to uważać przy overridowaniu metod przez plugins lub preferences – zbyt agresywne rozszerzenie typów może ukryć błędy logiki biznesowej.

3. Stałe w interfejsach bez modifikatora widoczności (i deprecacja)

PHP 7.2 deprecjonuje użycie each() oraz nieuprawione użycie liczb jako kluczy asocjacyjnych w kilku edge case’ach. Warto puścić na swoim projekcie php -l i sprawdzić, czy nie masz deprecation notices – w PHP 8.x te rzeczy zostały usunięte.

4. Libsodium w corze – koniec z mcrypt

Jedną z najważniejszych zmian jest oficjalne włączenie biblioteki Sodium do rdzenia PHP (rozszerzenie sodium). Jednocześnie mcrypt został usunięty (deprecated już w 7.1). Jeśli masz stary kod szyfrujący dane opakowany w mcrypt_encrypt() – najwyższy czas na migrację:

<?php

// STARY KOD – mcrypt (usunięty w PHP 7.2!)
// $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);

// NOWY KOD – sodium, bezpieczny i szybki
$key   = sodium_crypto_secretbox_keygen(); // 32 bajty
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

$encrypted = sodium_crypto_secretbox('Tajna wiadomość', $nonce, $key);
$decrypted = sodium_crypto_secretbox_open($encrypted, $nonce, $key);

echo $decrypted; // Tajna wiadomość

Jeśli prowadzisz sklep Magento i masz customowe moduły płatności lub integracje szyfrujące dane klientów – sprawdź to w pierwszej kolejności.

Podsumowanie

PHP 7.2 to solidna, ewolucyjna wersja. Nie rewolucjonizuje języka, ale zamyka kilka długo otwartych bolączek (sodium zamiast mcrypt, type hint object). Jeśli planujesz w przyszłości migrację na PHP 8.x, upgrade do 7.2 to dobry pierwszy krok – wymusisz usunięcie przestarzałego kodu, zanim zrobi to za Ciebie silnik.

About Henryk Tews

Co możesz przeczytać następne

GraphQL Federation – subgrafy, gateway, Apollo Router, integracja z Magento 2
PHP 7.4 preview – typed properties, arrow functions, spread w tablicach, preloading
AI w pracy PHP developera – Copilot, Claude, Ollama, gdzie pomaga a gdzie zawodzi
  • Publikacje
  • O autorze
  • Kontakt

© 2026 Created by

GÓRA
Zarządzaj zgodą
Aby zapewnić jak najlepsze wrażenia, korzystamy z technologii, takich jak pliki cookie, do przechowywania i/lub uzyskiwania dostępu do informacji o urządzeniu. Zgoda na te technologie pozwoli nam przetwarzać dane, takie jak zachowanie podczas przeglądania lub unikalne identyfikatory na tej stronie. Brak wyrażenia zgody lub wycofanie zgody może niekorzystnie wpłynąć na niektóre cechy i funkcje.
Funkcjonalne Zawsze aktywne
Przechowywanie lub dostęp do danych technicznych jest ściśle konieczny do uzasadnionego celu umożliwienia korzystania z konkretnej usługi wyraźnie żądanej przez subskrybenta lub użytkownika, lub wyłącznie w celu przeprowadzenia transmisji komunikatu przez sieć łączności elektronicznej.
Preferencje
Przechowywanie lub dostęp techniczny jest niezbędny do uzasadnionego celu przechowywania preferencji, o które nie prosi subskrybent lub użytkownik.
Statystyka
Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do celów statystycznych. Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do anonimowych celów statystycznych. Bez wezwania do sądu, dobrowolnego podporządkowania się dostawcy usług internetowych lub dodatkowych zapisów od strony trzeciej, informacje przechowywane lub pobierane wyłącznie w tym celu zwykle nie mogą być wykorzystywane do identyfikacji użytkownika.
Marketing
Przechowywanie lub dostęp techniczny jest wymagany do tworzenia profili użytkowników w celu wysyłania reklam lub śledzenia użytkownika na stronie internetowej lub na kilku stronach internetowych w podobnych celach marketingowych.
  • Zarządzaj opcjami
  • Zarządzaj serwisami
  • Zarządzaj {vendor_count} dostawcami
  • Przeczytaj więcej o tych celach
Zobacz preferencje
  • {title}
  • {title}
  • {title}