Các kiểu dữ liệu trong PHP
- 05-07-2022
- Toanngo92
- 2 Comments
Nói chung, kiểu dữ liệu đề cập đến việc phân loại dữ liệu dựa trên các thuộc tính của nó.
Tuy nhiên, PHP là một ngôn ngữ lập trình với cú pháp lỏng lẻo. Do đó, nó không yêu cầu người dùng xác định rõ ràng kiểu dữ liệu. Thay vào đó, PHP phân tích các thuộc tính của dữ liệu để xác định loại dữ liệu phù hợp.
PHP có một số kiểu dữ liệu chuẩn có sẵn cùng với các thuộc tính.
Dưới đây là một số kiểu dữ liệu PHP tiêu chuẩn và các thuộc tính của chúng:
Data type | Type Group |
Integer | Scalar type |
Float | Scalar type |
Boolean | Scalar type |
String | Scalar type |
Array | Compound type |
Object | Compound type |
Null | Special type |
Resource | Special type |
Mục lục
Kiểu dữ liệu Integer (số nguyên)
Kiểu dữ liệu số nguyên bao gồm một số nguyên (một số không thập phân), Nó phụ thuộc vào nền tảng và giá trị của nó nằm trong khoảng từ -2,147,483,648 đến 2,147,483,647 trên máy 32 bit và cao hơn trên máy 64 bit.
Kiểu dữ liệu này thường được sử dụng để biểu diễn dữ liệu số bao gồm các số nguyên trong chương trình, chẳng hạn như số lượng sản phẩm, số học sinh trong một lớp, số dân số, v.v.
Ví dụ:
<?php
$test_number = 100;
echo $test_number;
echo gettype($test_number);
?>
Ở đây, mặc dù biến $test_number không được khai báo rõ ràng là một số nguyên, nhưng nó được trình biên dịch giả định là như vậy dựa trên dữ liệu mà nó chứa. Vì được gán là một số nguyên và không thể được biểu diễn dưới dạng phân số, nên kiểu số nguyên là phù hợp nhất cho nó. Trong các ứng dụng, người dùng nên xác định dữ liệu nào là số nguyên và sử dụng kiểu số nguyên để đại diện cho dữ liệu đó. Giá trị tối đa được phép cho một số nguyên trong PHP trên hệ thống có thể được xác định bằng cách sử dụng hằng số PHP_INT_MAX. Đây là một hằng số được xác định trước được định nghĩa bởi PHP Core.
Các hằng số được xác định trước cho số nguyên trong PHP bao gồm:
- PHP_INT_MIN: Hỗ trợ số nguyên nhỏ nhất.
- PHP_INT_SIZE: Xác định kích thước của một số nguyên tính bằng byte.
Ví dụ in ra giá trị lớn nhất của kiểu dữ liệu số nguyên bằng cách sử dụng PHP_INT_MAX:
<?php
echo PHP_INT_MAX;
// output: 9223372036854775807
?>
Các tiêu chí cần thiết để lưu trữ dữ liệu dưới dạng kiểu dữ liệu số nguyên như sau:
- Nên có ít nhất một chữ số
- Không nên có dấu thập phân
- Có thể mang giá trị dương hoặc âm.
- Có thể được biểu diễn với cơ số 10-thập phân, cơ số 16 – thập lục phân, cơ số 8 – bát phân, hoặc cơ số 2 – nhị phân
Giới thiệu hàm var_dump
var_dump() là một hàm tích hợp sẵn trong PHP để lưu thông tin về một hoặc nhiều biến vào đầu ra. Thông tin được hiển thị sẽ bao gồm kiểu dữ liệu và giá trị của các biến. Hàm này chỉ đơn thuần là hàm in, không có kiểu dữ liệu trả về.
Thông thường, var_dump() thường được sử dụng để tiến hành debug khi chương trình gặp lỗi, cần hiểu rõ biến và kiểu dữ liệu của biến. Để in cấu trúc dữ liệu rõ ràng và đẹp hơn, hãy bổ sung thẻ “<pre></pre>” bao lấy output của var_dump để dữ liệu in ra rõ ràng và đẹp hơn.
Ví dụ:
<?php
var_dump(3, 3.1, FALSE, array(10, 20, 30, 40));
// output: int (3) float(3.1) bool(false) array(4) (
(O]=> int(10) [1]=> int(20) [2] => int(30) [3] => int(40)
)
?>
Kiểu Float (số thực)
Kiểu dữ liệu float bao gồm một số có dấu thập phân hoặc một số ở dạng hàm mũ. Ví dụ: 256.4, 10.358, 9.8, 7.64E + 5, 5.56E-5, v.v., Nó còn được gọi là ‘double’ hoặc ‘real number’. Trong PHP float, double và real đều giống nhau và chỉ được biểu diễn dưới dạng float.
Kiểu dữ liệu này phụ thuộc vào nền tảng và giá trị tối đa của kiểu dữ liệu float lên đến 1.7976931348623E+308. Nó có độ chính xác tối đa là 14 chữ số.
Ví dụ:
<?php
var_dump(1097.5499563); // output: float (1097.5499563)
?>
Trong ví dụ trên, var_dump() được sử dụng để hiển thị kiểu dữ liệu của một giá trị chữ nhất định. Vì chữ là số thập phân nên nó thuộc kiểu dữ liệu float.
PHP hỗ trợ một số hàm tích hợp để làm việc với các số dấu phẩy động. Để xác định xem kiểu dữ liệu của một biến có phải là float hay không, người ta có thể sử dụng các hàm PHP sau:
is_float(): Biến có kiểu float, phương thức này trả về true (1); nếu không, nó trả về false.
Cú pháp:
is_float(variable)
is_double(): bí danh của is_float()
Cú pháp:
is_double(variable)
Ví dụ:
<?php
var_dump(is_float(16.25));
var_dump(is_float("xyz"));
var_dump(is_float(789))
;
// output
// bool(true)
// bool(false)
// bool(false)
?>
Ở đây, trong đoạn mã, hàm is_float() được sử dụng với nhiều dữ liệu khác nhau để kiểm tra xem từng mục dữ liệu đã cho có phải là float hay không. Nếu nó là float, hàm trả về true, ngược lại, nó trả về false.
Một số hàm làm việc với kiểu dữ liệu số trong PHP: https://hocvietcode.com/cac-ham-lam-viec-voi-number-va-cac-ham-toan-hoc-trong-php/
Kiểu boolean (đúng/sai)
Loại biến đơn giản nhất là Boolean, (còn được gọi là bool trong PHP) hoạt động như một công tắc. Nó chỉ định một giá trị true có thể là true hoặc false. Boolean thường được sử dụng trong các câu lệnh điều kiện; true nếu điều kiện là true, ngược lại là false.
Ví dụ, trong một ứng dụng, người dùng có thể muốn lưu trữ một giá trị để cho biết học sinh là người mới hay hiện có. isNew có thể được định nghĩa là một biến bool và nếu đúng, nó có thể cho biết sinh viên đó là người mới và nếu sai, nó sẽ cho biết sinh viên đó là một sinh viên hiện có.
Để biểu diễn một ký tự bool, hãy sử dụng các hằng số PHP true hoặc false (cả hai đều không phân biệt chữ hoa chữ thường).
Ví dụ:
<?php
$bool_var = true;
echo $bool_var. "\n";
var_dump($bool_var);
$bool_var1 = false;
echo $bool_var1;
var_dump ($bool_var1);
// 1
// bool(true)
// bool(false)
?>
Kiểu String (chuỗi)
Chuỗi là một tập hợp các ký tự, chẳng hạn như “Hello toanngo92”. Thông thường, nó có các ký tự được bao quanh bởi dấu nháy đơn (’) hoặc dấu nháy kép (“). PHP không hỗ trợ Unicode, vì nó chỉ hỗ trợ bộ
Các chuỗi trong dấu nháy kép (“) được xử lý như sau:
Các escape sequence là các ký tự đặc biệt bắt đầu bằng dấu gạch chéo ngược (\) được thay thế bằng biểu diễn tương đương của chúng.
Escape Sequence | Description |
\n | Được thay thế bằng ký tự dòng mới |
\r | Được thay thế bằng ký tự xuống dòng |
\t | Được thay thế bằng ký tự tab |
\$ | Được thay thế bằng chính ký hiệu đô la ($) |
\” | Được thay thế bằng một dấu nháy kép đơn (“) |
\\ | Được thay thế bằng một dấu gạch chéo ngược (\) |
Tên biến (bắt đầu bằng $) được thay thế bằng chuỗi biểu diễn giá trị của chúng.
Ví dụ:
<?php
header('Content-type: text/plain');
$name = "William";
$str = '$name is displayed.\\n';
echo ($str) ;
echo "\n";
$str = "$name is displayed\n". "Goodbye.";
echo ($str);
?>
Kết quả
$name is displayed.\n
William is displayed
Goodbye.
Ở đây, hàm header(”Content-type: text/plain”); được đưa ra để chỉ ra cho trình thông dịch PHP rằng đầu ra phải được hiển thị trong trình duyệt dưới dạng văn bản thuần túy chứ không phải HTML. Nếu điều này không được cung cấp, \n trình tự thoát sẽ không hoạt động trong trình duyệt. Nếu tập lệnh đang được thực thi tại command line thay vì trình duyệt, thì câu lệnh này không cần thiết.
Trong mã, tên biến được gán giá trị bằng một chuỗi ký tự: william. Khi biến này được sử dụng trong một chuỗi được bao bởi dấu nháy đơn, nó sẽ coi như đây là chuỗi tĩnh và giá trị William sẽ không bị thay thế trong đầu ra. Tương tự, một escape sequence được nhúng trong một chuỗi được trích dẫn duy nhất sẽ không được xử lý.
Đây là sự khác biệt rõ ràng nhất giữa dấu nháy đơn (‘) và dấu nháy kép (“) khi sử dụng với chuỗi.
Xem thêm bài viết một số hàm làm việc với string (chuỗi): https://hocvietcode.com/cac-ham-lam-viec-voi-string-trong-php/
Kiểu Array (mảng)
Một mảng trong PHP là một kiểu phức hợp. Mảng là một biến đơn chứa các giá trị của cùng một kiểu dữ liệu. Trong PHP, một mảng là một bản đồ được xác định trước kết nối các giá trị với các khóa.
Bằng cách sử dụng các mảng trong mã nguồn, người dùng có thể giảm khối lượng mã trong chương trình vì họ sẽ không phải xác định nhiều biến để lưu trữ danh sách các mục dữ liệu.
Mảng cũng dễ điều hướng vì người ta có thể sử dụng các vòng lặp để đi qua tất cả các phần tử của một mảng. Các mảng có thể được sắp xếp và việc tìm kiếm trở nên dễ dàng hơn.
An array, list (vector), stack, hash table (a map implementation), collection, dictionary, queue,vv.. đều có thể được biểu diễn bằng kiểu mảng.
Khởi tạo mảng trong PHP:
Hàm dựng sẵn array() có thể được sử dụng để tạo một mảng. Nó có thể lấy bất kỳ số lượng cặp khóa và giá trị nào được phân tách bằng dấu phẩy (,) làm đối số.
Cú pháp:
array(
key => value,
key2 => value2,
key3 => value3,
...
)
Ví dụ:
<?php
$fruits = array("range", "apple", "mango");
var_dump ($fruits) ;
?>
Kết quả:
array(3) (
[0] =>
string(6) "orange"
(1)=>
string(5) "apple"
[2] =>
string(5) "mango"
)
Một tập lệnh PHP để tạo một mảng được hiển thị trong ví dụ trên. $fruit là một biến mảng trong đoạn mã này. Kiểu dữ liệu và giá trị của các phần tử được trả về bởi hàm var_dump().
Các kiểu mảng trong PHP:
- Mảng chứa một hoặc nhiều mảng
- Mảng có chỉ mục số (numberic index)
- Mảng có các khóa (key) được đặt tên
Độ dài phần tử mảng – hàm count() hoặc sizeof()
Hàm count() hoặc sizeof() trong PHP trả về số lượng phần tử hoặc giá trị trong một mảng.
Ví dụ:
<?php
$friends = array("A","B","C");
echo count($friends);
// output: 3
?>
Ngoài ra, có thể sử dụng kí tự [] để khởi tạo mảng. Ví dụ:
<?php
$friends = ["A","B","C"];
echo count($friends);
// output: 3
?>
Kiểu Object (đối tượng)
Đối tượng là các thể hiện của các lớp do người dùng định nghĩa có thể lưu trữ cả giá trị và chức năng. Nói một cách dễ hiểu, một lớp là một cấu trúc dữ liệu có chứa các biến của các kiểu dữ liệu khác nhau (được gọi là thuộc tính), hằng số và hàm (được gọi là phương thức). Các đối tượng phải được khai báo rõ ràng.
Trong lập trình hướng đối tượng, một class (lớp) là một định nghĩa mẫu của phương thức và biến trong một loại đối tượng cụ thể . Do đó, một đối tượng là một thể hiện cụ thể của một class (lớp) nó chứa các giá trị thực thay vì các biến. Lớp là một trong những ý tưởng xác định của lập trình hướng đối tượng.
Để định nghĩa class cơ bản cần từ khóa class (gọi là lớp), theo sau là tên class (gọi là lớp), theo sau là định nghĩa về các thuộc tính và phương thức thuộc về lớp, tất cả chúng đều được đặt trong một cặp dấu ngoặc nhọn. Tên class có thể là bất kỳ mã định danh hợp lệ nào, miễn là nó không phải là một từ dành riêng trong PHP.
Ví dụ:
<?php
class SinhVien{
public $name = "Nguyen Van A";
public $classs = "A";
public $birthday = "2000-01-02";
public $gender = "male";
public $subject = "Math, Physical";
// property
// method
// constructor => ham nay se chi khi doi tuong bat dau khoi tao
public function __construct()
{
}
public function getName(){
return $this->name;
}
}
$sinhvien = new SinhVien();
echo $sinhvien->getName();
echo '<br/>';
echo $sinhvien->name;
// output:
// Nguyen Van A
// Nguyen Van A
?>
Kiểu giá trị Null (Rỗng)
Kiểu null đề cập đến một biến không có giá trị, Chỉ cho phép giá trị ‘null’ hoặc “NULL” cho kiểu null (không phân biệt chữ hoa chữ thường). Khi một biến được tạo mà không có giá trị, nó sẽ được cung cấp một giá trị null theo mặc định.
Ví dụ:
<?php
$var = NULL;
var_dump($var);
echo is_empty($var);
echo is_null($var);
// output:
// null
// true
// true
?>
PHP có một hàm có sẵn là empty(), trả về true nếu giá trị của một biến được đánh giá là false. Điều này có thể có nghĩa là một chuỗi rỗng, NULL, số nguyên 0 hoặc một mảng không có phần tử. PHP cũng hỗ trợ hàm tích hợp sẵn, is_null() trả về giá trị true nếu biến có giá trị NULL.
Đoạn mã này hiển thị một ví dụ về tập lệnh PHP cách đặt lại một biến có giá trị null để làm cho nó rỗng:
<?php
$x = "Hello toanngo!";
$x = null;
var_dump($x);
// output: null
?>
Kiểu Resource (tài nguyên)
Trong PHP, tài nguyên là một kiểu phức hợp được xử lý giống như một biến đặc biệt hơn là một kiểu dữ liệu cụ thể. Nó hoạt động như một kho lưu trữ các chức năng và tài nguyên được tham chiếu bên ngoài. Một ví dụ phổ biến về tài nguyên PHP là một lệnh gọi cơ sở dữ liệu.
Hàm is_resource() có thể được sử dụng để xác định xem một biến có phải là tài nguyên hay không. Hàm get_resource_type () trả về kiểu tài nguyên.
Các biến tài nguyên có thể chứa các xử lý đặc biệt trỏ đến tệp (files) và kết nối cơ sở dữ liệu (database connection)
Bài tập
Phần 1: Thực hiện kết nối cơ sở dữ liệu (4 điểm)
Viết một tệp PHP có thể được thêm vào các tệp PHP khác bằng cách sử dụng các hàm bao gồm hoặc yêu cầu. Tệp này phải:
+ Tạo kết nối với cơ sở dữ liệu MySQL và đăng nhập hợp lệ
thông tin xác thực. Tài nguyên kết nối nên được lưu trữ trong một biến có tên thích hợp. (1 điểm)
* Tạo cơ sở dữ liệu abc12 nếu nó không tồn tại. (/ điểm)
* Chọn cơ sở dữ liệu abc12.
* Tạo một bảng abc12users nếu nó không tồn tại với các trường sau: (1
điểm)
° USERNAME VARCHAR (100)
° PASSWORD_HASH VARCHAR (40)
° PHONE VARCHAR(10)
+ Trường USERNAME phải được chỉ định là UNIQUE.
+ Nếu bất kỳ thao tác nào trong số này gây ra lỗi, dừng thực hiện và in thông báo lỗi (1 điểm)
Phần 2: Viết phiếu đăng ký (4 điểm)
Lưu ý rằng tất cả phần này nên được thực hiện trong cùng một tệp PHP. Tập lệnh sẽ phản hồi khác nhau tùy thuộc vào tình huống (yêu cầu POST có tồn tại hay không, tên người dùng đã được sử dụng hay chưa, v.v.).
- Viết một tệp PHP sẽ xuất ra một biểu mẫu có 3 trường: tên người dùng,
mật khẩu và số điện thoại. Các trường này phải được gửi qua POST vào cùng một tệp. (1 điểm)
- Tệp PHP truy vấn cơ sở dữ liệu trước khi thử chèn và nếu tên người dùng đã tồn tại, hãy hiển thị lại thông báo lỗi và biểu mẫu đăng ký trống. (1 điểm)
- Tập tin PHP đảm nhận việc chèn dữ liệu vào cơ sở dữ liệu có tên abc12 và bảng có tên abc12users (như hình trên), sau đó xác nhận đăng ký bằng cách hiển thị tên người dùng và số điện thoại trở lại trình duyệt. (2 điểm)
Lưu ý rằng trường MẬT KHẨU giả định rằng bạn đang lưu trữ biểu diễn chuỗi hex của hàm băm SHA-1 của mật khẩu. Như đã giải thích trong các bài giảng, bạn không bao giờ nên lưu trữ mật khẩu ở dạng bản rõ. Có nhiều cách an toàn hơn để lưu trữ mật khẩu. Nếu bạn chọn sử dụng một phương pháp khác, trường PASSWORD_HASH của bảng có thể không còn là CHAR (40) và bạn nên thay đổi nó nếu thích hợp.
Hãy nhớ thoát đúng đầu vào của người dùng trước khi thực hiện truy vấn cơ sở dữ liệu.
Phần 3: Viết biểu mẫu đăng nhập (4 điểm)
Viết một tệp PHP sẽ xuất ra một biểu mẫu chứa 2 trường: tên người dùng và mật khẩu. Khi gửi biểu mẫu, mã phải kiểm tra với cơ sở dữ liệu để xem liệu tên người dùng
- cặp mật khẩu đã chính xác. Nếu vậy, hãy hiển thị một thông báo chào mừng. Nếu không, hãy hiển thị thông báo
“Tên người dùng hoặc mật khẩu không hợp lệ” theo sau cùng một biểu mẫu đăng nhập.
Một lần nữa, chỉ nên có một tệp PHP và bạn nên chuyển hướng đến cùng một nơi sau khi gửi. Đầu ra phải là một trong ba tùy chọn:
Login form:
2. Thông báo chào mừng, nếu đăng nhập thành công. (1 điểm)
3. Thông báo không hợp lệ và biểu mẫu đăng nhập, nếu đăng nhập không thành công. (2 điểm)
Phần 4: Tạo session cho login (4 điểm)
Bắt đầu với biểu mẫu đăng nhập trong Bài tập 4, hãy thêm thông tin sau:
+ Đăng nhập thành công nên đặt một số biến phiên để máy chủ biết rằng người dùng đã đăng nhập. Ví dụ: đặt $_SESSION["loggedin"] thành TRUE. (1 điểm)
+ Khi trang được tải, hãy kiểm tra biến phiên. Nếu người dùng đã đăng nhập, hãy hiển thị thông báo chào mừng thay vì biểu mẫu đăng nhập. (1 điểm)
+ Thêm nút “Đăng xuất” vào thông báo chào mừng, khi được nhấp vào, sẽ xóa biến phiên để người dùng đăng xuất. Nhấp vào nút sẽ chuyển hướng người dùng đến cùng một trang, trang này hiện hiển thị biểu mẫu đăng nhập. (2 điểm)
Hành vi này phải phù hợp với thời gian tồn tại của các phiên. Nghĩa là, người dùng nên đăng nhập mặc dù đã làm mới và mở cùng một trang trong nhiều tab, nhưng nên đăng xuất sau khi trình duyệt bị đóng.
Phần 5: Remember me
Thêm remember me vào form login:
Nếu hộp được chọn và đăng nhập thành công, hãy lưu một cookie
xác định người dùng đến máy chủ. Trong những lần truy cập tiếp vào trang, người dùng sẽ xuất hiện khi đăng nhập, ngay cả khi trình duyệt đã bị đóng.
Bạn có thể chọn thời gian hết hạn hợp lý cho cookie. (1 điểm)
Cũng nên nhớ rằng nếu người dùng đăng xuất theo cách thủ công bằng cách nhấp vào nút “Đăng xuất” thì cookie đó sẽ bị xóa (đặt thời hạn là một thời gian trong quá khứ). (2 điểm)
2 Comments