Skip to main content

Session 2 - New features of PHP 7.0.4 & Form Handling in PHP

I. New features of PHP 7.0.4

1. Function intdiv

  • Đối với các phiên bản trước thì phép chia luôn trả về giá trị kiểu float, để lấy dữ liệu kiểu số nguyên int ta phải ép kiểu như sau:
$result = (int) 11 / 2;

// =>result sẽ có giá trị là 5
  • Từ phiên bản PHP 7, function intdiv hỗ trợ chia 2 số mà không cần ép kiểu:
$result = intdiv(11, 2);
// =>result sẽ có giá trị là 5

2. Toán tử Spaceship

  • Là toán tử dùng để so sánh
  • Thường được dùng trong các bài toán sắp xếp
  • Có ký hiệu là <=>
  • So sánh 2 toán hạng với 3 quy tắt:
    • Lớn hơn: khi toán hạng trái lớn hơn toán hạn phải
    • Nhỏ hơn: khi toán hạn trái bé hơn toán hạng phải
    • Bằng: khi toán hạng trái và phải bằng nhau

Ví dụ:

$x = 5;
$y = 9;
echo $x <=> $y; // output: -1

$x = 'ABX';
$y = 'ABC';
echo $x <=> $y; // output: 1

$x = array(1, 9, 2);
$y = array(1, 9);
echo $x <=> $y; // output: 1

3. Toán tử Null Coalescing Operator

  • Là toán tử dùng để kiểm tra 1 biến có null hay không
  • Có ký hiệu là ??
  • Kết quả:
    • Trả về toán hạng đầu tiên nếu biến không null
    • Trả về toán hạng thứ 2 khi biến null hoặc undefine

Undefine

echo $name ?? 'Noname'; // Ouput: 'Noname' vì biến #name chưa được khai báo

Null

$name = null;
echo $name ?? 'Noname'; // Ouput: 'Noname' vì biến #name có giá trị là null

Empty

$name = '';
echo $name ?? 'Noname'; // Ouput: '' vì biến #name có giá trị là rỗng

4. Scalar Type Declarations

  • Chỉ định kiểu dữ liệu cho tham số của một function
  • Còn được gọi là gợi ý kiểu dữ liệu
  • Cung cấp gợi ý cho function
  • Scalar type declaration có 2 loại:
    • Coercive (cưỡng chế)
    • Strict (nghiêm nghặc)

Coercive mode

function sum(int ...$params) {
// params là mảng kiểu số nguyên
return array_sum($params);
}
echo sum(3, '5', 2.1);
// Output sẽ là 10

Strict mode

declare(strict_types = 1);
function sum(int ...$params) {
// params là mảng kiểu số nguyên
return array_sum($params);
}
echo sum(3, '5', 2.1);
// Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer

5. Uniform Variable Syntax

  • Cho phép sử dụng nhiều toán tử trong một biểu thức nhất định
  • Thực hiện theo thứ tự từ trái sang phải
  • Cho phép tương thích ngược với phiên bản PHP cũ
  • Cho phép lồng ghép các toán tử
function hello()
{
echo 'Hello Dat';
}

function bye()
{
echo 'Bye Dat';
}

$functionCall = 'bye';

$functionCall(); // Output: 'Bye Dat'

6. Toán tử Use

  • Is used to achieve aliasing - Đặt bí danh cho class, function
  • Gôm nhóm các khai báo (khai báo class, function)
  • Cho phép nhóm các class, function và Constant được nhập từ cùng một namespace
include 'myfile.php';

use aptech\{Boston, NewYork}; // Import class
use function aptech\{foo1, foo2}; // Import function

7. Closure call () Method

  • Là một biến chứa function đi cùng với môi trường
  • Closure function được phép truy cập vào các biến mà nó có thể bắt được
  • Có 2 cách để sử dụng biến $this trong Closure function:
    • Instance method - Closure->bindTo()
    • Static method - Closure::bind()
<?php

class Hello {
private $word = 'Hello';
}

class Bye {
private $word = 'Bye';
}

$closure = function ($name) {
echo $this->word . ' ' . $name;
};

$objHello = new Hello;

$closure->call($objHello, 'Dat'); // Output 'Hello Dat'

8. Generator Return Expressions

  • Một câu lệnh được sử dụng trong một trình tạo để trả về biểu thức cuối cùng
  • Dùng method getReturn() để lấy giá trị
  • Method getReturn() nên được sử dụng sau khi đã generate result
function example() {
yield "five";
yield "six";
yield "seven";
return "eight";
}

$generator = example();
foreach ($generator as $val){
echo $val, PHP_EOL;
}
echo 'Final Result: ' . $generator->getReturn(); // Output 'Final Result: eight'

9. Levels Parameter of dirname() function

  • Function dirname() dùng để lấy đường dẫn của thư mục cha
  • Function trong phiên bản PHP 7 cung cấp thêm tham số thứ 2, nó là level của thư mục cha
  • Function dirname() có các tham số:
    • path: đường dẫn
    • level: cấp cha, mặc định là 1
echo dirname('/ttdat/projects/testweb/home.php'); // Output '/ttdat/projects/testweb'
echo dirname('/ttdat/projects/testweb/home.php', 2); // Output '/ttdat/projects'
echo dirname('/ttdat/projects/testweb/home.php', 3); // Output '/ttdat'

II. Form Handling in PHP

1. Giới thiệu

  • Có 2 cách để gửi Form Data đến Web Server:

    • GET
    • POST
  • Web Server:

    • Nhận thông tin được gửi đến
    • Xử lý
    • Lưu vào database

2. Form

Form là gì?

  • Form là trang web có chứa fields (trường dữ liệu)
  • Nó được sử dụng để người dùng nhập thông tin
  • Nó gửi dữ liệu từ client đến server

Các thuộc tính của thẻ Form:

  • action: Là đường dẫn dữ liệu được gửi đến. Ví dụ: /xu-ly-dang-ky.php
  • method: Là phương thức gửi GET hoặc POST

3. Phương thức GET

  • Form sẽ gửi dữ liệu được của người dùng đến server
  • Các biến được gửi lên sẽ được nối vào chuỗi phía sau action ngăn cách bởi dấu ?, và các biến cách nhau bởi dấu &. Ví dụ:
    • /xu-ly-dang-ky.php?userame=ttdat&password=12345678&name=Dat

Hạn chế của phương thức GET:

  • FormData được gửi lên với bảng mã ASCII.
  • Lượng thông tin được gửi đi có giới hạn
  • Độ dài của query string chỉ 255 ký tự

4. Phương thức POST

  • Form sẽ gửi dữ liệu được mã hóa của người dùng đến server
  • Sử dụng message body của HTTP request để chứa thông tin
  • Không có giới hạn dữ liệu được truyền tải

5. Retrieving Data Using the GET Method

Ví dụ về URL: /xu-ly-dang-ky.php?userame=ttdat&password=12345678&name=Dat

Dùng biến $_GET để lấy dữ liệu

Ta có thể lấy dữ liệu bằng cách:

$username = $_GET["userame"];
$password = $_GET["password"];
$name = $_GET["name"];

6. Retrieving Data Using the POST Method

Dùng biến $_POST để lấy dữ liệu

$username = $_POST["userame"];
$password = $_POST["password"];
$name = $_POST["name"];

7. Using Hidden Fields

Hidden Field là gì?

  • Là trường dữ liệu được nhúng bên trong HTML Form
  • Cho phép người dùng gửi dữ liệu đến server mà không cần nhập
  • Không hiển thị ở giao diện người dùng
<input type="hidden" name="id" value="29" />