Home » Bài 3: Những kiểu dữ liệu (Data types) trong PHP

Bài 3: Những kiểu dữ liệu (Data types) trong PHP

Data types in PHP

by Tan Nguyen
21 minutes read

Bài 2: Cú pháp PHP cơ bản, Khai báo hằng và biến trong PHP đã hướng dẫn cơ bản về cú pháp và khái kiệm về biến, hằng, tiếp tục series học php căn bản thì trong bài viết này mình sẽ giới thiệu những kiểu dữ liệu (data types) được sử dụng trong biến của ngôn ngữ PHP nhé!

kieu du lieu trong php

Những kiểu dữ liệu trong PHP

Cách chính để lưu trữ thông tin trong chương trình PHP là sử dụng một biến.

Những điều nên biết về biến trong PHP

Dưới đây là những điều quan trọng nhất bạn nên biết về biến trong PHP.

  • Tất cả các biến trong PHP đều được kí hiệu với dấu $ ở đầu.
  • Giá trị của một biến là giá trị của phép gán gần đây nhất của nó.
  • Các biến được gán với toán tử =, biến ở bên trái còn biểu thức được ước lượng ở bên phải.
  • PHP làm rất tốt việc chuyển đổi tự động từ kiểu này sang kiểu khác khi cần thiết.
  • Biến trong PHP giống với Perl.

Tổng hợp các kiểu dữ liệu trong PHP

PHP có tổng tất cả 8 kiểu dữ liệu mà chúng ta sử dụng để xây dựng các biến.

  • Integer − Kiểu INT số nguyên. Ví dụ 1989
  • Double, Float− Kiểu số thực. Ví dụ 3.14159 hay 49.1.
  • Boolean − có 2 giá trị TRUE hoặc FALSE.
  • NULL − là một kiểu đặc biệt, nó chỉ có giá trị: NULL
  • String − là chuỗi các kí tự.
  • Array − là tập hợp được đặt tên và lập chỉ mục của các giá trị khác.
  • Object − là instance (sự thể hiện) của các lớp mà lập trình viên tự định nghĩa, nó có thể đóng gói các các loại giá trị và hàm khác nhau, nó dành riêng cho các lớp.
  • Resource − là một biến đặc biệt nó giữ tham chiếu tới các tài nguyên ngoại vi đến PHP (ví dụ: kết nối Database).

Kiểu dữ liệu Int (Integer)

Chúng là tất cả các số, bao gồm cả nguyên âm và nguyên dương, nhưng không bao gồm số thực. Nó là kiểu đơn giản nhất. Chúng có thể được gán cho một biến hoặc được sử dụng trong biểu thức.

Phạm vi kiểu int nằm trong vùng từ -2147483648 đến 2147483648

Đặc biệt kiểu int có thể ở viết ở nhiều cơ số khác nhau. Kiểu số nguyên có thể trong hệ thập phân, hệ bát phânhệ thập lục phân. Mặc định khi ở hệ thập phân, hệ bát phân thì số nguyên sẽ được chỉ định bắt đầu với số 0 và hệ thập lục phân sẽ bắt đầu với 0x.

<?php
$bien_int = 12345;
$bien_int_2 = -12345 + 12345;
echo $bien_int . $bien_int_2;
$thap_luc_phan = 0x1A; // số thập lục phân
?>

Ép dữ liệu sang kiểu INT

Cú Pháp(int)$ten_bien;

<?php
$bien1 = '123'; //đây là 1 biến chứa chuỗi ký tự $bien = (int)$bien; //biến khi giờ đã được ép kiểu sang int và nó có giá trị là số 123
$bien1 = (int)$bien1;
echo $bien1; //khi chạy lệnh echo thì kết quả xuất ra màn hình sẽ là số 123

$bien2 = '123a';
$bien2 = (int)$bien2;
echo $bien2; //khi chạy lệnh echo thì kết quả xuất ra màn hình sẽ là số 123, ký tự a sẽ không in được vì không thể chuyển sang số và nó sẽ xoá ký tự đó đi

$bien3 = 'a123';
$bien3 = (int)$bien3;
echo $bien3; //khi chạy lệnh echo thì kết quả xuất ra màn hình sẽ là số 0 , ký tự a sẽ không in được vì không thể chuyển sang số và nó sẽ xoá ký tự đó đi
?>

Trong đoạn code trên, các bạn chú ý vào $bien3, biến này có chứa lý tự ‘a’ đầu tiên nên nó sẽ không chuyển sang kiểu int được và tự động cắt bỏ tất cả mọi thứ đằng sau nó. Suy ra khi này nó sẽ thành biến rỗng, và khi nó là chuỗi rỗng thì khi sang kiểu INT nó sẽ là số 0

Để kiểm tra một biến nào đó có phải kiểu INT không bạn dùng 2 hàm is_int($bien) hoặc is_integer($bien) kết quả trả về giá trị True nếu là kiểu INT và trả về False nếu không phải kiểu INT.

Kiểu số thực (Double, Float)

Số thực gồm hai phần, phần nguyên và phần thập phân, được ngăn cách nhau bằng dấu chấm. Kích cỡ của nó được xác định phụ thuộc vào từng platform , giá trị lớn nhất xấp xỉ 1.8e308

<?php
   $bien_double_1 = 2.2888800;
   $bien_double_2 = 2.2111200;
   $ket_qua = $bien_double_1 + $bien_double_2;
   print("$bien_double_1 + $bien_double_2 = $ket_qua <br>");
?>

Kết quả xuất ra màn hình sẽ là: 2.28888 + 2.21112 = 4.5

Ép dữ liệu sang kiểu số thực

Cũng như kiểu INT, đẻ ép 1 biến sang kiểu số thực bạn chỉ việc sử dụng (float) hoặc (double) trước biến đó. Ví dụ:

<?php
$bien = 12;
$bien = (float) $bien; // khi này biến bị ép sang kiểu float
$bien = (double) $bien; // khi này biến bị ép sang kiểu double
echo $bien;
?>

Cũng giống INT, nếu bạn muốn kiểm tra xem 1 biến có phải thuộc kiểu dữ liệu là số thực hay không thì bạn sử dụng 2 hàm này nhé: is_float($bien) hoặc is_double($bien)

Kiểu Boolean trong PHP

Kiểu dữ liệu đơn giản nhất trong PHP. Nó chỉ chứa 2 giá trị là đúng hoặc sai (TRUE hoặc FALSE). Để tạo biến kiểu boolean thì bạn gán giá trị cho nó là TRUE hoặc FALSE.

Đây là quy tắc để xác định tính đúng đắn của bất kì giá trị nào chưa phải là kiểu Boolean.

  • Nếu giá trị là một số, nó là false nếu nó bằng 0 true nếu khác 0.
  • Nếu giá trị là một chuỗi, nó false nếu chuỗi là rỗng (không tồn tại kí tự nào) hoặc là chuỗi “0”, nếu không là true.
  • Giá trị của kiểu NULL luôn luôn là false.
  • Nếu giá trị là một array, nó sẽ false nếu nó không chứa các giá trị hay còn gọi là mảng rỗng, và nếu có giá trị thì sẽ là true. Với một object, chứa một giá trị nghĩa là có một biến thành viên đã được gán một giá trị.
  • Resource hợp lệ là true (mặc dù có một vài hàm trả về các resource khi chúng thành công, và trả về FALSE nếu thất bại).
  • Đừng sử dụng double như là Boolean.
<?php
$a = 123; // TRUE
$b = 0; // FALSE
$c = '0'; // FALSE
$d = 'a123b' // TRUE
$e = null; // FALSE
$f = ''; // FALSE
?>

chúng ta có thể chuyển đổi từ Boolean thành một số nguyên. Và khi được chuyển đổi sang số nguyên, giá trị mà ta nhận về chỉ có hai giá trị là 01.

var_dump( (int) true ); // int(1)
var_dump( (int) false ); // int(0)

Chuyển đổi Boolean sang dạng chuỗi String

Tương tự như ép kiểu chuyển đổi sang int mà ta cũng có thể chuyển từ kiểu Boolean  sang String như sau:

var_dump( (string) true ); // string(1) "1"
var_dump( (string) false ); // string(0) ""

Kiểu Chuỗi (String) trong PHP

Kiểu chuỗi trong PHP gồm string(chuỗi) và kiểu char(ký tự). Để khai báo chuỗi cho 1 biến, các bạn chỉ cần gán 1 chuỗi vào biến đó.

Chuỗi phải được bao quanh bằng dấu nháy đơn  hoặc dấu nháy kép . Chuỗi sử dụng nháy đơn là một chuỗi tĩnh, còn chuỗi sử dụng nháy kép là một chuỗi động, thay đổi tùy theo giá trị của biến.

Không có giới hạn về độ dài của chuỗi, có thể dài tùy ý nếu bộ nhớ cho phép.

Ví dụ:

$string_1 = "Chào mừng đến với tanhongit.net";
$string_2 = "abc 123 hello";

Các chuỗi được giới hạn bởi các dấu nháy kép được PHP xử lý bằng 2 cách sau đây:

  • Các chuỗi kí tự bắt đầu với (\) được thay thế với một kí tự đặc biệt.
  • Các biến (bắt đầu với $) sẽ được thay thế bằng cách biểu diễn ra chuỗi giá trị của chính biến đó.

Các quy tắc thay thế

  • \n được thay thế bằng ký tự newline (enter xuống dòng mới)
  • \r được thay thế bởi ký tự carriage-return, được hiểu là đưa con trỏ về đầu dòng nhưng không xuống dòng.
  • \t được thay thế bởi ký tự tab
  • $ được thay thế bằng một dấu $
  • \” được thay thế bằng một dấu nháy kép “
  • \\ được thay thế bằng một dấu nháy đơn \

Để kiểm tra một biến kiểu chuỗi (string) ta dùng hàm is_string($bien), kết quả hàm này trả về TRUE nếu đúng và FALSE nếu không đúng.

Dấu nháy kép – Double Quoted

Với phương pháp đặt giá trị của chuỗi với trích dẫn kép (dấu ngoặc kép (“)) thì ta có trể gán được các biến khác thành một phần giá trị của chuỗi đó luôn.

<?php
$variable1 = "Testing!";
$variable2 = ["Testing?", ["Failure", "Success"]]; //array
$my_string = "Variables and escape characters are parsed:\n\n";
$my_string .= "$variable1\n\n$variable2[0]\n\n"; //$variable2[0]: element in the array
$my_string .= "There are limits: " . $variable2[1][0];
$my_string .= "\n\nBut we can get around them by wrapping the whole variable in braces: {$variable2[1][1]}";
var_dump($my_string);

/*
string(98) "Variables and escape characters are parsed:

Testing!

Testing?

There are limits: Failure

But we can get around them by wrapping the whole variable in braces: Success
*/

Ở snippet trên mình có dùng cặp dấu ngoặc nhọn ở dòng số 7, mục đích của nó được sử dụng để cô lập hay gom nhóm các tên biến phức tạp lại với nhau. Bạn có thể phân tích cú pháp các biến chỉ bằng cách thêm tiền tố vào $, nhưng đối với cú pháp phức tạp hơn (như lấy giá trị mảng đa chiều $var[2] [3]), bạn phải đặt biểu thức của mình trong dấu ngoặc nhọn {}.

Chính vì thế mà ở dòng số 6 thay vì ta code là: $my_string .= "There are limits: " . $variable2[1][0]; thì ta có thể sử dụng một cách khác như sau:

$my_string .= "There are limits: {$variable2[1][0]} ";

Và trong snippet trên mình có sử dụng cả mảng để làm giá trị cho một phần tử trong chuỗi. các bạn hãy tham khảo về mảng ở phần tiếp theo.

Heredoc String

Trong PHP, các khai báo chuỗi HEREDOC thực sự hữu ích để xuất ra một khối html.  Nó vẫn tận dụng được cách dùng dấu ngoặc kép (“”) tự chèn giá trị biến nhưng thoải mái hơn khi sử dụng các ký tự đặc biệt.

Heredoc bao giờ cũng bắt đầu bằng <<<, tiếp theo là một tên định danh do bạn đặt rồi phải xuống dòng ngay mà không được phép thêm dấu cách hay phím tab nào cả, và cuối cùng phải kết thúc bằng định danh; ở một dòng mới.

Lưu ý rằng phần tên định danh của bạn phải được viết hoa. Ví dụ:

$variable1 = "Including text blocks is easier";
$my_string = <<< EOF
Everything is parsed in the same fashion as a double-quoted string,
but there are advantages. $variable1; database queries and HTML output
can benefit from this formatting.
Once we hit a line containing nothing but the identifier, the string ends.
EOF;
var_dump($my_string);

/*string 'Everything is parsed in the same fashion as a double-quoted string,
but there are advantages. Including text blocks is easier; database queries and HTML output
can benefit from this formatting.
Once we hit a line containing nothing but the identifier, the string ends.' (length=271)*/

Tên mã định danh kết thúc phải xuất hiện trên một dòng mới. Không có khoảng trắng nào được phép trước hoặc sau mã định danh, và giống như bất kỳ dòng nào trong PHP, nó cũng phải được chấm dứt bởi một dấu chấm phẩy.

Điều này được gọi là heredoc và nó cho phép bạn thực hiện một đoạn văn bản dài qua nhiều dòng. Bạn có thể đặt PHP biến trong đó và chúng sẽ thay thế bằng giá trị.

Nowdoc String

Nowdoc cũng tương tự như Heredoc, chỉ khác là ở phần khai báo bắt buộc phải có thêm cặp dấu nháy đơn. Tức là khi khai báo <<<'Định-Danh' (nowdoc sẽ có cặp '' – còn heredoc thì sử dụng cặp dấu nháy kép "" hoặc không cần dùng gì cả.)

<?php
$my_string = <<<'EOF'
A similar syntax to heredoc but, similar to single quoted strings,
nothing is parsed (not even escaped apostrophes \' and backslashes \\.)
EOF;
var_dump($my_string);
/*
string 'A similar syntax to heredoc but, similar to single quoted strings,
nothing is parsed (not even escaped apostrophes \' and backslashes \\.)' (length=139)
*/

Ngoài ra, khác với heredoc có thể phân tíchnhận được các biến được chèn bên trong chuỗi thì nowdoc lại không làm được điều đó. Nếu như ta chèn một biến vào chuỗi thì nowdoc sẽ hiểu nó chỉ là một giá trị chuỗi mà thôi. Ví dụ:

<?php
$variable1 = "Including text blocks is easier";
$my_string = <<< 'EOF'
Everything is parsed in the same fashion as a double-quoted string,
but there are advantages. $variable1; database queries and HTML output
can benefit from this formatting.
Once we hit a line containing nothing but the identifier, the string ends.
EOF;
var_dump($my_string);
/*output string:
Everything is parsed in the same fashion as a double-quoted string,
but there are advantages. $variable1; database queries and HTML output
can benefit from this formatting.
Once we hit a line containing nothing but the identifier, the string ends.*/

Tham khảo thêm về String: https://www.php.net/manual/en/language.types.string.php

Kiểu Mảng (Array) trong PHP

Một mảng là một cấu trúc dữ liệu mà lưu giữ danh sách  các phần tử có cùng kiểu dữ liệu và nó là một trong các kiểu dữ liệu trong php có độ phức tạp tính toán cao.

Riêng với PHP thì các phần tử của mảng có thể không cùng kiểu dữ liệu, và các phần tử của mảng được truy xuất thông qua các chỉ mục(vị trí) của nó nằm trong mảng.

Cú pháp

Để tạo mảng chúng ta sử dụng hàm array() trong PHP (Từ PHP 5.4 trở lên bạn chỉ cần viết giá trị trong cặp dấu [ ] cũng được)

Note: Các bạn dùng hàm var_dump($mang); để in ra các phần tử của mạng để test trong quá trình học nhé. Hàm này có thể sử dụng được tất cả các kiểu dữ liệu trong php. (Hàm var_dump chỉ dùng để test)

//cách tạo mảng 1
<?php
    $names = array("Tan","Binh","Minh");
    var_dump($names);
?>
//cách tạo mảng 2
<?php 
$names = array(
0 => 'Tan',
1 => 'Binh',
2 => 'Minh'
); 
var_dump($names);
//cách tạo mảng 3 
<?php 
$names = array(); 
$names[0] = 'Tan';
$names[1] = 'Binh';
$names[2] = 'Minh';
var_dump($names);
//cách tạo mảng 4 
<?php 
$names = array(); 
$names[] = 'Tan'; 
$names[] = 'Binh'; 
$names[] = 'Minh'; 
var_dump($names);

Có 3 loại mảng trong PHP:

  • Mảng indexed
  • Mảng associative
  • Mảng đa chiều

Các bạn sẽ xem chi tiết về mảng ở bài viết sau nhé!

Kiểu NULL trong PHP

NULL là một kiểu đặc biệt mà chỉ có một giá trị NULL. Để cung cấp cho biến giá trị NULL, đơn giản bạn gán nó như sau:

$a = null; // Khởi tạo biến $a và mang gán giá trị null
$b = (int)$a; // sau khi ép kiểu, biến $b có giá trị là ( 0 )
$c = (string)$a; // sau khi ép kiểu, biến $c có giá trị rỗng ( '' )
$d = (bool)$a; // sau khi ép kiểu, biến $d có giá trị FALSE

Giá trị của biến có thể được xóa bằng cách gán giá trị NULL cho biến đó.

Lúc bạn khởi tạo một biến và bạn gán = NULL thì sẽ hệ thông sẽ không tốn bộ nhớ để lưu trữ, nên việc sử dụng nó rất có lợi.

Theo quy ước, hằng đặc biệt NULL là viết hoa, nhưng thực sự nó là không phân biệt kiểu chữ, cho nên bạn vẫn có thể viết thường mà không bị lỗi.

Một biến mà đã được gán NULL sẽ có các thuộc tính sau:

  • Nó ước lượng là FALSE trong một ngữ cảnh Boolean.
  • Nó trả về FALSE khi được kiểm tra với hàm IsSet() trong PHP.

Kiểu Object (đối tượng)

Các bạn sẽ tìm hiểu và học về kiểu dữ liệu này ở phần lập trình hướng đối tượng OOP của PHP ở chương sau nhé!

Kiểu Resource

resource không phải là một kiểu dữ liệu thật sự. Nó được dùng để lưu trữ các tham chiếu đến các hàm hoặc cái tài nguyên bên ngoài.  Ví dụ như file, socket, stream, document hoặc dễ thấy nhất là kêt nối đến database connection.

<?php
$sock = fsockopen('www.google.com', 80);
echo get_resource_type($sock); //hàm kiểm tra kiểu resource 
//output: stream

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!

Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

CHÚC CÁC BẠN THÀNH CÔNG

5/5 - (2 votes)

Related Posts

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More

0
Would love your thoughts, please comment.x
()
x