PHP 8.2 - sprawdź co nowego!

Tablice, stringi, pliki - kolejny projekt > Lekcja 5

Dodawanie i usuwanie zadań

Kolejny krok to dodawanie nowych zadań. Wystarczy, że odczytamy z pliku dane i zamienimy JSONa na tablicę (już to mamy - funkcja readFromFile()), a następnie dodamy nowy element, zamienimy znów na JSON i zapiszemy. Proste, nie? Też tak myślę.

A więc zróbmy nową funkcję o nazwie add(), która jako pierwszy argument ma otrzymać treść dodawanego zadania.

<?php
function add(string $text): array
{
    $tasks = readFromFile();
    $tasks[] = $text;
    return $tasks;
}

To wszystko powinno być już dla Ciebie zrozumiałe. Odczytujemy listę zadań, którą dostajemy w formie tablicy, dodajemy nowy element i zwracamy. Brakuje tylko zapisu do pliku. Jako że będzie on używany w przynajmniej dwóch miejscach, (dodawanie i usuwanie) zróbmy kolejną funkcję.

<?php
function saveToFile(array $tasks)
{
    $data = json_encode($tasks);
    if (file_put_contents(FILENAME, $data) !== false) {
        echo 'OK!';
    } else {
        echo '! Error writing file.';
    }
}

Mam nadzieję, że również i ten kod rozumiesz, ale w razie czego krótko wytłumaczę. Najpierw tablicę zamieniamy na JSON przy użyciu funkcji json_encode(), a następnie przy użyciu file_put_contents() zapisujemy go do pliku. Warunkiem kontrolnie sprawdzimy, czy zapis się powiódł. A skąd wiedziałem, że właśnie taki warunek jest potrzebny? Oczywiście, że z dokumentacji, cytując:

Return Values
This function returns the number of bytes that were written to the file, or FALSE on failure.

Pozostaje tylko złożyć to w całość w pliku index.php:

<?php
// switch ...
    case 'add':
        if (!empty($content)) {
            $tasks = add($content);
            saveToFile($tasks);
        } else {
            echo '! Error: Task can\'t be empty.';
        }
        break;

Dodałem też prosty warunek sprawdzający, czy treść zadania nie jest pusta (i gdyby tak się stało wyświetlający komunikat).

Testowanie programu poleceniami php index.php oraz php index.php add &quot;Nowe zadanie&quot;

Pozostało jeszcze usuwanie. Założenie jest takie, że będziemy podawali numer zadania, który jest jednocześnie indeksem w tablicy (zwiększonym o jeden podczas wyświetlania na liście).

No więc zróbmy to - utwórzmy funkcję remove() przyjmującą w argumencie numer zadania do usunięcia. Samo wyrzucenie konkretnego indeksu to żaden problem. Wystarczy użyć unset() ze wskazaniem czego chcemy się pozbyć.

<?php
function remove(int $number): array
{
    $tasks = readFromFile();
    unset($tasks[$number - 1]);
    return $tasks;
}

Na koniec dodajmy jeszcze, co trzeba w pliku index.php i…

<?php
// switch ...
    case 'remove':
        $tasks = remove($content);
        saveToFile($tasks);
        break;

…gotowe, mamy nasz program!

Test usuwania zadań: polecenia php index.php remove 1 i php index.php

Rzecz jasna jest to bardzo prosta aplikacja i wiele by tu można dodać. Więcej informacji przy każdym zadaniu (np. data, kategoria, priorytet), zabezpieczenie przed powielaniem, sprawdzenie przed usuwaniem czy dane zadanie istnieje - to tylko kilka z pomysłów, jakie od razu się nasuwają. Nie będziemy się już jednak tym zajmować. Miał to być projekt typowo edukacyjny i mam nadzieję, że ta rola została spełniona.

Cały gotowy program umieściłem również na GitHubie.

Poprzednia lekcja Dalej

Udostępnij

  • Facebook
  • Twitter

Komentarze