Cześć!
Serdecznie dziękuję za przeczytanie poprzedniego wpisu o nowej wersji PHP. Wpis był bardzo długi, poświęciłem mnóstwo pracy nad nim. Głównie w godzinach bardzo porannych 🙃. Niestety znalazły się w nim dwa błędy, za co najmocniej przepraszam. W tym wpisie opiszę oba błędy, zapraszam do czytanie 🙂.
Operator instanceof
– literał jako pierwszy operand – brak Fatal error
Błędny był opis tej sekcji. Pierwotny opis brzmiał:
Załóżmy, że masz tablicę z nieznaną Ci zawartością i chcesz z wyciągnąć tylko obiekty danej instancji. Teoretycznie wystarczy przefiltrować tablicę za pomocą
instanceof
:$dateTimeObjects = array_filter($data, function ($data) { return $data instanceof \DateTime; });Jednak w v7.2 spowoduje to
Fatal error
:// Fatal error: instanceof expects an object instance, constant given in php shell code on line 1Do wersji v7.2 operator instanceof działał tylko z obiektami, w v7.3 naprawili to i teraz możesz wykonać instanceof na dowolnym typie zmiennej, w przypadku gdy nie będzie ona obiektem, zwróci false:
php > var_dump(false instanceof \stdClass); bool(false) php > var_dump([] instanceof \stdClass); bool(false) php > var_dump('test' instanceof \stdClass); bool(false) php > var_dump(1 instanceof \stdClass); bool(false)
Operator instanceof
działa z zmiennymi, nie rzuca wyjątku. Użytkownik PHP
w komentarzach mi zwrócił uwagę na ten błąd. Faktycznie sprawdziłem ten przykład kodu raz jeszcze i wyjątek nie był rzucany w poprzednich wersjach 🙈. Co ciekawe napisałem w tytule sekcji Literał
, a Literał
to przecież zapis stałej wartości, nie zmiennej 🙃 (https://pl.wikipedia.org/wiki/Literał). Także tutaj popełniłem gafę tysiąc. Poprawiona wersja dostępna w oryginalnym wpisie (https://damian.dziaduch.pl/2018/11/15/php-7-3-co-nowego/#instanceof-literal-jako-pierwszy-operand-brak-fatal-error).
Nowe funkcje array_key/value_first/last()
RFC (https://wiki.php.net/rfc/array_key_first_last) opisuje cztery nowe funkcje:
array_key_first()
,array_key_last()
,array_value_first()
,array_value_last()
.
Przegłosowane i zaimplementowane z nich zostały tylko dwie pierwsze… Niedoczytałem tej informacji i w wersji pierwotnej opisałem że będą wszystkie funkcje dostępne 🤦🏻♂️. Z wpisu usunąłem już informacje o dwóch ostatnich funkcjach (https://damian.dziaduch.pl/2018/11/15/php-7-3-co-nowego/#nowe-funkcje-array_key_first_last).
Wpis o wersji 7.3 zawiera 34 sekcje. Dwie były błędne. Cały artykuł w wersji obecnej ma 3264 słowa i jest 119 wersją. Dotarł on do 2500 czytelników. Serdecznie dziękuję 😃