0

PHP 7.1.0 wypuszczone – co nowego wprowadzono do specyfikacji?

Fragmentu kodu źródłowego WordPress (język programowania PHP)

Kilka dni temu, a mianowicie pierwszego grudnia, na oficjalnej stronie PHP pojawiła się informacja o upublicznieniu wersji 7.1.0 najpopularniejszego języka back-endu wykorzystywanego w Internecie, z którego korzystają między innymi serwisy: Facebook, Wikipedia, Flickr czy WordPress. Wersja 7.0, w głównej mierze opierała się na optymalizacji już istniejących klas i modułów. Tym razem jednak zmiany dotyczą wprowadzenia nowych funkcjonalności, przede wszystkim związanych z typowaniem, widocznością stałych czy usprawnieniem obsługi list.

Nullable types

W wersji 7.1.0 wprowadzono tzw. nullable type, który służy do określenia czy parametr przyjmowany przez metodę może być pusty (null) czy nie. Zostało to zrealizowane poprzez zastosowanie znaku pytajnika przed typem parametru. Rozwiązanie jest całkiem dobre… ale i tak jakoś bardziej przemawia do mnie idea wykorzystywana w języku Java, gdzie przykładowo typ int jest typem prostym i nie zawiera nulla, a typ Integer jest typem obiektowym i już może go zawierać. Może to jednak tylko kwestia przyzwyczajenia? Najważniejsze jednak, że twórcy PHP zwrócili na to uwagę i starają się jakkolwiek to rozwiązać. Przykładowy kod pochodzi z dokumentacji PHP:

function say(?string $msg) {
    if ($msg) {
        echo $msg;
    }
}
 
say('hello'); // ok -- wyświetli hello
say(null); // ok -- nic nie wyświetli
say(); // błąd -- brakujący parametr
say(new stdclass); //błąg -- zły typ

Void return type

Kolejną rzeczą, która jest znana od dawna w innych językach programowania o silnym typowaniu, jest zwracanie wartości void przez metody (a więc niezwracanie jakiejkolwiek wartości 🙂 ). Ten mechanizm został jednak dopiero teraz wprowadzony w PHP i działa jak na poniższym przykładzie.

function test(): void {
    // ok
}

/* ------------------- */

function test(): void {
    return; // ok
}

/* ------------------- */

function test(): void {
    return 1; // Błąd! Funkcja nie może zwracać wartości
}

/* ------------------- */

function test(): void {
    return null; // Błąd! Funkcja nie może zwracać wartości
}

/* ------------------- */

function test(void param) { // Błąd! Void nie może być użyte jako typ parametru
}

Iterable

Iterable jest nowym pseudo-typem, który reprezentuje tablice lub kolekcje implementujące interfejs Traversable. Inaczej mówiąc można w ten sposób określić zbiór elementów po których możemy iterować, np. za pomocą pętli foreach (przykład z dokumentacji PHP):

function foo(iterable $iterable) {
    foreach ($iterable as $value) {
        // ...
    }
}

Widoczność stałych w klasie

Do tej pory w języku PHP można było dodawać modyfikatory dostępu do klas, metod czy zmiennych, jednak nie było to możliwe dla stałych. Teraz postanowiono to zmienić. Działanie modyfikatorów względem stałych jest w pełni analogiczne jak chociażby w przypadku metod czy zmiennych. W pełni poprawne są zatem wyrażenia typu:

class Test {
   const TEST_CONST = 0; // domyślny modyfikator dostępu to public

   private const TEST_PRIVATE = 0; // stała prywatna
   public const TEST_PUBLIC = 0; // stała publiczna (słowo 'public' można opuścić)
   protected const TEST_PRIVATE = 0; // stała chroniona

}

Pozostałe

Oprócz wskazanych zmian dodano kilka rozwiązań, które wydają się wręcz oczywiste, jak np. łapanie wielu wyjątków z bloku try, umożliwienie tworzenia listy z użyciem nawiasów kwadratowych (do tej pory było to możliwe tylko dla tablic) czy również możliwość dodawania własnych kluczy do listy. Wprowadzono również kilka pomniejszych zmian.

Podsumowanie

Język PHP ciągle szuka nowych rozwiązań i stara się zapewnić użytkownikom jak największą swobodę pisania kodu, przez co można by zaryzykować stwierdzenie, że jest jednym z najbardziej nowatorskich języków programowania. Oczywiście nie wszystkie propozycje zyskują ostatecznie uznanie, ale takich sytuacji można się ustrzec tylko wtedy, gdy nie wprowadza się nic nowego.

Widać wyraźną tendencję od co najmniej kilku wersji PHP, że autorzy starają się pozwolić programistom na kontrolę typów parametrów czy zwracanych wartości, przez co określenie, że język jest „słabo typowany” coraz mniej pasuje do języka PHP i pewnie wraz z czasem można się spodziewać dalszego dążenia do skierowania języka PHP w stronę „silnego typowania”. Wydaje się to dobrym posunięciem, gdyż pozwala na wykrycie wielu potencjalnych błędów już na etapie pisania kodu i analizy składniowej (syntaktycznej). Całkiem dobrym pomysłem wydaje się jednak obecna dowolność stosowania tego typu wyrażeń – swobodnie można pisać kod nie korzystając z określania typów danych, przez co język może być prostszy dla początkujących, o czym pewnie też myślą autorzy PHP.

Sporo obecnych języków programowania składa się obecnie z wielu niezbyt spójnych części (chociażby prehistoryczne funkcje języka C/C++ dotyczące komunikacji przez sieć pochodzące jeszcze sprzed standardu ANSI C). Z tym samym problemem ciągle boryka się język PHP, który sporo się zmieniał na przestrzeni swojego istnienia. Autorzy chcąc zachować kompatybilność z poprzednimi wersjami języka nie mogą od razu porzucić niektórych rozwiązań i muszę je jakoś przeboleć. Z tego względu zdarza się spotykać w języku PHP kawałki proceduralnego kodu czy chociażby niekonsekwencję niektórych rozwiązań (jak chociażby nawiasy kwadratowe, które do tej pory nie działały z listami). Dobrym znakiem jednak jest to, że programiści odpowiedzialni za PHP starają się krok po kroku poprawiać te usterki i wydawać coraz lepszy produkt. Możemy więc optymistycznie patrzeć na przyszłość tego języka programowania, gdyż pewnie jeszcze nieraz mile nas zaskoczy.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *