Hướng dẫn readline in php - dòng đọc trong php

Rất nhiều người học PHP thường nghĩ rằng PHP luôn phải gắn chặt với phát triển ứng dụng web.

Nội dung chính

  • Chuẩn bị project
  • Chuẩn bị ứng dụng
  • Cấu trúc dữ liệu
  • Hiển thị danh sách dữ liệu
  • Thêm dữ liệu mới
  • Lưu trữ dữ liệu trong file JSON
  • Chức năng tìm kiếm
  • Chức năng tìm và xóa
  • Mã nguồn
  • Kết luận

Nội dung chính

  • Chuẩn bị project
  • Chuẩn bị ứng dụng
  • Cấu trúc dữ liệu
  • Hiển thị danh sách dữ liệu
  • Thêm dữ liệu mới
  • Lưu trữ dữ liệu trong file JSON
  • Chức năng tìm kiếm
  • Chức năng tìm và xóa
  • Mã nguồn
  • Kết luận

Thực tế không phải như vậy. Mặc dù được sử dụng chính trong web, PHP là một ngôn ngữ lập trình script đa năng tương tự như Python. Bạn có thể sử dụng PHP để viết chương trình chạy trên hệ điều hành giống như với các ngôn ngữ lập trình khác.

Cách thức đơn giản và phổ biến nhất là sử dụng PHP CLI để chạy các script dưới dạng ứng dụng console (đa nền tảng).

Chúng ta đã sử dụng cách thức này để dạy/học ngôn lập trình PHP cơ bản. Cách học này giúp tránh những phức tạp của ứng dụng web để tập trung vào cú pháp của chính ngôn ngữ trong giai đoạn đầu.

Trong bài học này chúng ta sẽ tổng hợp tất cả các kiến thức cơ bản đã học để xây dựng một ứng dụng quản lý sách điện tử ở dạng console đơn giản.

Đây sẽ là bài học cuối vận dụng PHP CLI trước khi chuyển sang ứng dụng web.

Chuẩn bị project

Để thực hiện bài học này chúng ta sẽ sử dụng IDE PhpStorm (bản 2020.2). Theme sử dụng là Visual Studio Dark (Rider UI Them Pack plugin). Nếu bạn chưa cài đặt PHP và PhpStorm, hãy đọc lại bài học về cấu hình PHP CLI và IDE.

Tạo một project mới theo các bước sau:

Bước 1. Ấn nút New Project để tạo một dự án mớiẤn nút New Project để tạo một dự án mới

Hướng dẫn readline in php - dòng đọc trong php

Bước 2. Chọn mục PHP Empty Project trong danh sách bên trái. Mục Location chỉ định đường dẫn đến nơi sẽ chứa các file của dự án.Chọn mục PHP Empty Project trong danh sách bên trái. Mục Location chỉ định đường dẫn đến nơi sẽ chứa các file của dự án.

Bước 3. Trong thư mục CLI tạo 4 file php mới:Trong thư mục CLI tạo 4 file php mới:

  • BookMan.php – file script chính của chương trình.
  • Config.php – file chứa một số thông tin cấu hình.
  • Console.php – file chứa các lệnh để xuất nhập dữ liệu với giao diện console.
  • DataService.php – file chứa các lệnh làm việc với dữ liệu.

Tất cả các file script tạm thời để trống. Chúng ta sẽ lần lượt viết code cho chúng trong các phần tiếp theo của bài học.

Chuẩn bị ứng dụng

Bước 1. Cấu hình ứng dụng Cấu hình ứng dụng

Để tiện lợi khi viết code về sau, chúng ta trước hết định nghĩa một số hằng trong file Config.php như sau:

Bước 2. Chỉ định tải các script ở đầu file BookMan.php như sau: Chỉ định tải các script ở đầu file BookMan.php như sau:

Bước 3. Xây dựng hàm hỗ trợ main_error và main_help cho BookMan.php Xây dựng hàm hỗ trợ main_error và main_help cho BookMan.php

Chúng ta xây dựng hàm hỗ trợ thông báo lỗi main_error và hàm trợ giúp main_help trong BookMain.php như sau:

/**
 * Báo lỗi
 * @param string $cmd lệnh lỗi
 */
function main_error(string $cmd) {
    echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
}
/**
 * Hiển thị trợ giúp
 */
function main_help() {
    echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
    echo <<

Bước 4. Tạo mảng chứa thông tin ánh xạ chuỗi => hàm Tạo mảng chứa thông tin ánh xạ chuỗi => hàm

Mảng $actions chứa thông tin để ánh xạ chuỗi lệnh người dùng nhập sang một hàm.actions chứa thông tin để ánh xạ chuỗi lệnh người dùng nhập sang một hàm.

// mảng actions chứa thông tin để ánh xạ chuỗi lệnh người dùng nhập sang một hàm
$actions = [
    'help' => function() { main_help();},
    'quit' => function() { exit();},
];

Trong mảng $actions chúng ta sử dụng hàm lambda làm giá trị cho mỗi phần tử, còn chuỗi lệnh làm khóa.

Hiện tại $actions chỉ chứa hai phần tử: lệnh ‘help’ sẽ ánh xạ sang chạy hàm main_help(), lệnh ‘quit’ sẽ ánh xạ sang chạy hàm exit(). Trong các phần sau của bài học chúng ta sẽ lần lượt bổ sung thêm các lệnh mới vào $actions.

Bước 5. Xây dựng hàm entry point cho ứng dụng Xây dựng hàm entry point cho ứng dụng

Mỗi ứng dụng đều cần một điểm khởi đầu (entry point) để chạy các tính năng. Trong script này hàm entry point sẽ được đặt tên là main(). Hàm main() chứa vòng lặp chính của chương trình.

/**
 * Entry point
 */
function main() {
    global $actions;
    while (true) {
        echo BLUE . "Command > " . RESET;
        $cmd = strtolower(readline());
        if(array_key_exists($cmd, $actions))
            $actions[$cmd]();
        else
            main_error($cmd);
    }
}
main();

Bước 6. Chạy thử ứng dụng Chạy thử ứng dụng

Giờ nếu chạy ứng dụng từ PHP CLI bạn thu được kết quả như sau:

Ứng dụng console PHP CLI

Bạn thu được một ứng dụng console hoàn toàn bình thường!

Tạm thời chúng ta chỉ thực hiện được hai lệnh help và quit. Nếu sử dụng lệnh khác sẽ gặp báo lỗi.

Cấu trúc dữ liệu

Mở file DataService.php và viết code như sau:

 'PHP programming for dummy',
        'authors' => 'Trump D.',
        'publisher' => 'The White house',
        'year' => 2017
    ],
    [
        'title' => 'PHP programming for expert',
        'authors' => 'Obama B.',
        'publisher' => 'The White house',
        'year' => 2013
    ],
    [
        'title' => 'PHP programming for professional',
        'authors' => 'Bush G.',
        'publisher' => 'The White house',
        'year' => 2009
    ],
    [
        'title' => 'PHP programming for beginner',
        'authors' => 'Clinton B.',
        'publisher' => 'The White house',
        'year' => 2005
    ],
);

Đây là cấu trúc dữ liệu cho ứng dụng quản lý sách.

Trong chương trình này, để lưu trữ dữ liệu chúng ta sử dụng một mảng kết hợp với tên biến $books. Như bạn đã biết, mảng trong PHP là một cấu trúc dữ liệu mạnh và đa năng. Chúng ta hoàn toàn có thể sử dụng mảng để biểu diễn những cấu trúc dữ liệu quan hệ phức tạp.books. Như bạn đã biết, mảng trong PHP là một cấu trúc dữ liệu mạnh và đa năng. Chúng ta hoàn toàn có thể sử dụng mảng để biểu diễn những cấu trúc dữ liệu quan hệ phức tạp.

Ở đây $books là một mảng của mảng.

Mỗi phần tử của $books là một mảng kết hợp và có thể xem là dữ liệu của một cuốn sách cụ thể. Do vậy, chúng đều chứa các cặp khóa => giá trị tương ứng với thông tin về tiêu đề (title), tác giả (authors), nhà xuất bản (publisher), năm xuất bản (year).

Với cấu trúc dữ liệu như trên bạn có thể:

  • Truy xuất từng cuốn sách qua biến $books và chỉ số như sau:
    /**
     * Báo lỗi
     * @param string $cmd lệnh lỗi
     */
    function main_error(string $cmd) {
        echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
    }
    /**
     * Hiển thị trợ giúp
     */
    function main_help() {
        echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
        echo <<5.
  • Truy xuất thông tin của thể của từng cuốn sách như sau:
    /**
     * Báo lỗi
     * @param string $cmd lệnh lỗi
     */
    function main_error(string $cmd) {
        echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
    }
    /**
     * Hiển thị trợ giúp
     */
    function main_help() {
        echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
        echo <<6.
  • Có thể duyệt danh sách với lệnh foreach như sau:
    /**
     * Báo lỗi
     * @param string $cmd lệnh lỗi
     */
    function main_error(string $cmd) {
        echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
    }
    /**
     * Hiển thị trợ giúp
     */
    function main_help() {
        echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
        echo <<7 hoặc 
    /**
     * Báo lỗi
     * @param string $cmd lệnh lỗi
     */
    function main_error(string $cmd) {
        echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
    }
    /**
     * Hiển thị trợ giúp
     */
    function main_help() {
        echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
        echo <<8 nếu bạn cần cả giá trị chỉ số.

Sau đây chúng ta sẽ lần lượt thực hiện các chức năng chính của một ứng dụng quản lý.

Hiển thị danh sách dữ liệu

Bước 1. Thêm phương thức book_info vào DataService.php: Thêm phương thức book_info vào DataService.php:

/**
 * Thông tin sách
 * @param array $b
 * @return string
 */
function book_info(array $b) {
    $title = $b['title'];
    $authors = $b['authors'];
    $publisher = $b['publisher'];
    $year = $b['year'];
    return "$title [$authors] -$publisher, $year";
}

Phương thức này chuyển đổi dữ liệu từ một mảng phần tử của $books (tức là dữ liệu 1 cuốn sách) về một chuỗi ký tự để dễ dàng in ra.

Bước 2. Viết code cho file Console.php như sau: Viết code cho file Console.php như sau:

 $b) {
        print "[$key] " . ds\book_info($b) . RN;
    }
}

Phương thức này duyệt qua mảng $books và lần lượt in ra từng phần tử. Lưu ý cách chúng ta sử dụng biệt danh (alias) của namespace DataService:

/**
 * Báo lỗi
 * @param string $cmd lệnh lỗi
 */
function main_error(string $cmd) {
    echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
}
/**
 * Hiển thị trợ giúp
 */
function main_help() {
    echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
    echo <<9. Từ giờ về sau bạn có thể gọi các hàm trong DataService qua lối viết ds\tên_hàm(), ví dụ như 
// mảng actions chứa thông tin để ánh xạ chuỗi lệnh người dùng nhập sang một hàm
$actions = [
    'help' => function() { main_help();},
    'quit' => function() { exit();},
];
0 ở trên.

Bước 3. Cập nhật biến $actions và hàm main_help() trong BookMan.php: Cập nhật biến $actions và hàm main_help() trong BookMan.php:

function main_help() {
    echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
    echo << function() { main_help();},
    'quit' => function() { exit();},
    'list' => function () { Console\ui_list(); },
];

Ở bước này chúng ta bổ sung một phần tử mới cho $actions và một dòng thông báo mới cho main_help().

Bước 4. Chạy thử với lệnh list Chạy thử với lệnh list

Thêm dữ liệu mới

Tiếp theo đây chúng ta sẽ xây dựng chức năng thêm dữ liệu.

Bước 1. Thêm hai hàm sau vào file DataService.php:Thêm hai hàm sau vào file DataService.php:

/**
 * Thêm sách vào kho
 * @param $b
 */
function book_add($b) {
    global $books;
    array_push($books, $b);
}
/**
 * Tạo dữ liệu sách mới
 * @param string $title
 * @param string $authors
 * @param string $publisher
 * @param int $year
 * @return array
 */
function book_create(string $title, string $authors, string $publisher, int $year) {
    return [
        'title' => $title,
        'authors' => $authors,
        'publisher' => $publisher,
        'year' => $year
    ];
}

Bước 2. Thêm hàm sau vào Console.php: Thêm hàm sau vào Console.php:

0

Bước 3. Cập nhật main_help() và $actions: Cập nhật main_help() và $actions:

1

* Từ giờ về sau chúng ta sẽ chỉ trình bày cập nhật cho mảng $actions. Hàm mail_help() bạn có thể tùy ý điều chỉnh.

Bước 4. Chạy thử với lệnh new: Chạy thử với lệnh new:

Lưu trữ dữ liệu trong file JSON

JSON là định dạng dữ liệu văn bản phổ biến hàng đầu trong ứng dụng web. Dữ liệu dạng JSON có thể dùng để lưu trữ (trong file) và trao đổi (giữa web client và server).

Trong ví dụ này chúng ta sẽ sử dụng định dạng JSON cho việc lưu trữ dữ liệu của ứng dụng.

PHP hỗ trợ làm việc với JSON qua hai hàm

// mảng actions chứa thông tin để ánh xạ chuỗi lệnh người dùng nhập sang một hàm
$actions = [
    'help' => function() { main_help();},
    'quit' => function() { exit();},
];
1() – chuyển object thành chuỗi json, và
// mảng actions chứa thông tin để ánh xạ chuỗi lệnh người dùng nhập sang một hàm
$actions = [
    'help' => function() { main_help();},
    'quit' => function() { exit();},
];
2() – chuyển chuỗi json thành object.

Để nhanh chóng lưu dữ liệu vào file có thể sử dụng hàm

// mảng actions chứa thông tin để ánh xạ chuỗi lệnh người dùng nhập sang một hàm
$actions = [
    'help' => function() { main_help();},
    'quit' => function() { exit();},
];
3(). Để đọc dữ liệu từ file có thể dùng hàm
// mảng actions chứa thông tin để ánh xạ chuỗi lệnh người dùng nhập sang một hàm
$actions = [
    'help' => function() { main_help();},
    'quit' => function() { exit();},
];
4().

Giờ hãy cùng thực thi chức năng lưu và tải dữ liệu.

Bước 1. Thêm hai hàm sau vào DataService.php: Thêm hai hàm sau vào DataService.php:

2

Bước 2. Thêm hai hàm sau vào Console.php:Thêm hai hàm sau vào Console.php:

3

Bước 3. Cập nhật $actions: Cập nhật $actions:

4

Bạn tự cập nhật main_help() theo ý muốn.

Bước 4. Chạy thử ứng dụng với hai lệnh mới load và save.Chạy thử ứng dụng với hai lệnh mới load và save.

Chức năng tìm kiếm

Bước 1. Thêm hàm book_search() vào DataService.php: Thêm hàm book_search() vào DataService.php:

5

Bước 2. Thêm hàm ui_search() vào Console.php Thêm hàm ui_search() vào Console.php

6

Bước 3. Cập nhật $actions: Cập nhật $actions:

7

Bạn tự cập nhật main_help() theo ý muốn.Chạy thử chương trình với lệnh search:

Bước 4. Chạy thử ứng dụng với hai lệnh mới load và save.

Chức năng tìm kiếm Thêm hàm book_delete vào DataService.php

8

Bước 1. Thêm hàm book_search() vào DataService.php: Thêm hàm ui_del() vào Console.php:

9

Bước 3. Cập nhật $actions: Cập nhật $actions:

/**
 * Báo lỗi
 * @param string $cmd lệnh lỗi
 */
function main_error(string $cmd) {
    echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
}
/**
 * Hiển thị trợ giúp
 */
function main_help() {
    echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
    echo <<0

Bạn tự cập nhật main_help() theo ý muốn. Chạy thử với lệnh del:

Bước 4. Chạy thử ứng dụng với hai lệnh mới load và save.

Chức năng tìm kiếm

/**
 * Báo lỗi
 * @param string $cmd lệnh lỗi
 */
function main_error(string $cmd) {
    echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
}
/**
 * Hiển thị trợ giúp
 */
function main_help() {
    echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
    echo <<1
/**
 * Báo lỗi
 * @param string $cmd lệnh lỗi
 */
function main_error(string $cmd) {
    echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
}
/**
 * Hiển thị trợ giúp
 */
function main_help() {
    echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
    echo <<2
/**
 * Báo lỗi
 * @param string $cmd lệnh lỗi
 */
function main_error(string $cmd) {
    echo RED . "Command '$cmd' not found! Type 'help' for supported commands." . RESET . RN;
}
/**
 * Hiển thị trợ giúp
 */
function main_help() {
    echo BLUE . 'BOOK MANAGER V1.0 By TuHocICT.com' . RESET . RN;
    echo <<3

Bước 1. Thêm hàm book_search() vào DataService.php:

Bước 2. Thêm hàm ui_search() vào Console.php

Bước 4. Chạy thử chương trình với lệnh search:

Chức năng tìm và xóa

Bước 1. Thêm hàm book_delete vào DataService.phpgiúp đỡ site bằng một hành động nhỏ để site có thể phát triển và phục vụ bạn tốt hơn.
+ Nếu bạn thấy bài viết hữu ích, hãy giúp chia sẻ tới mọi người.
+ Nếu có thắc mắc hoặc cần trao đổi thêm, mời bạn viết trong phần thảo luận cuối trang.
Cảm ơn bạn!