[php7]Zamiana isset na null coalescence operator

[php7]Zamiana isset na null coalescence operator
SP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

Robię walidację formularza w php7 i wyczytałem w manualu, że isset już nie jest obsługiwany w php7 i null coalescence operator powinien być używany zamiast isset jednak za bardzo nie wiem jak go wykorzystać w takiej formie, w szczególności dla zagnieżdżonych if-ów. Kod w chwili obecnej, napisany zgodnie z klasycznym podejściem, prezentuje się następująco:

Kopiuj
$login1 = (filter_input(INPUT_POST, 'login1', FILTER_VALIDATE_EMAIL));
$login2 = (filter_input(INPUT_POST, 'login2', FILTER_VALIDATE_EMAIL));
$password1 = (filter_input(INPUT_POST, 'password1', FILTER_VALIDATE_STRING));
$password2 = (filter_input(INPUT_POST, 'password2', FILTER_VALIDATE_STRING));

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($login1) && isset($login2) && isset($password1) && isset($password2)) {
        $register = new User();
        if (!$login1) {
            echo '<p>text no</p>';
        } elseif (strlen($password1)) && (strlen($password2)) < 8) {
            echo '<p>text no</p>';
        } elseif ($password1 != $password2) {
            echo '<p">text no</p>';
        } else {
            if ($register->register($login2, $password2)) {
                echo '<p>text yes</p>';
            } else {
                echo '<p>text no</p>';
            }
        }
    }
}

Jak tę siatkę if-ów zamienić na null coalescence operator?

mr_jaro
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Grudziądz/Bydgoszcz
  • Postów: 5300
0

http://php.net/manual/en/function.isset.php Jak byk jest napisane, że jest dostępne.

Maciej Cąderek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1264
0

A na kiego grzyba Ci tam isset?? Przecież tam masz w najgorszym wypadku nulle, czyli falsy value, a nie undefined (nie znasz podstaw koercji).

PS
Słyszał o czymś takim jak DRY?
Aż mnie ciarki przeszły od tych ifów, przecież to wszystko możnaby zapisać chociażby tak:

Kopiuj
$isValid = $_SERVER['REQUEST_METHOD'] === 'POST' &&
           $login1 && $login2 && $password1 && $password2 &&
           $password1 === $password2 && strlen($password1) >= 8;
           
echo $isValid ? 'ok' : 'not ok';

W powyższym przykładzie nie ma rejestracji bo powinna być ona wykonana OSOBNO, to nie jest część walidacji.

PPS
Oczywiście jak chcesz pokazać szczegółowy rodzaj błędu, to jedną zmienną tego nie załatwisz, no ale widać nie potrzebujesz tego.

PPPS
Nie piszę w pehapie jakby co, pewnie można to zrobić lepiej.

dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

isset jest dalej dostępny.
coalesce operator ma zastępować isset W OKREŚLONYM PRZYPADKU UŻYCIA, a nie w każdym miejscu, gdzie jest użyte isset

więcej:
http://php.net/manual/en/migration70.new-features.php

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.