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ênint
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" />