Trao đổi với tôi

http://www.buidao.com

6/20/11

[PHP] Kiểm tra kiểu dữ liệu trong PHP

Bài viết này sẽ nói đến kiểu dữ liệu và kiểm tra kiểu dữ liệu trong PHP

PHP hỗ trợ tám kiểu dữ liệu nguyên thuỷ. Bốn kiểu thông thường là: boolean, integer, floating-point number(float), string. Hai kiểu phức tạp là: mảng( array) và đối tượng ( object). Và cuối cùng là hai kiểu đặc biệt : resource và NULL. Loại dữ liệu của biến thông thường không được gán bởi người lập trình mà được quyết định tại thời gian chạy của PHP, phụ thuộc vào ngữ cảnh mà biến được dùng.

Boolean

Đây là kiểu đơn giản nhất. Một kiểu boolean biểu thị một giá trị thật. Nó có thể là TRUE hay FALSE. Cú pháp: để chỉ định một giá trị boolean, có thể sử dụng từ khoá TRUE hay là FALSE. Cả hai đều không phân biệt chữ hoa hay chữ thường. Ví dụ:

1$foo=True; // gán giá trị TRUE cho biến $foo.

Để có thể chuyển một giá trị sang kiểu boolean, chúng ta có thể dùng (bool) hay (boolean). Tuy nhiên trong hầu hết các trường hợp bạn không cần phải sử dụng việc ép kiểu này, bởi giá trị sẽ được tự động chuyển nếu nó là một toán tử, hàm hay là cấu trúc điều khiển đòi hỏi một tham số kiểu boolean. Chú ý: -1 được xem là TRUE, giống như các giá trị khác 0 khác ( bất kể là số dương hay âm).

Integer

Là một tập hợp bao gồm các số {...,-2,-1,0,1,2,...}.
Cú pháp: Integer có thể được chỉ định trong cơ số 10, cơ số thập lục phân hay cơ số bát phân, tuỳ chọn đi trước bởi dấu - hay +. Nếu bạn sử dụng với cơ số bát phân, bạn phải theo thứ tự với 0 đứng trước, còn đối với số thập lục phân thì 0x. Ví dụ như sau:

1$a = 1234; # số thập phân
2
3$a = -123; # số âm
4
5$a = 0123; # số bát phân
6
7$a = 0x1A; # số thập lục phân

Kích thước của kiểu dữ liệu này là 32bit, và PHP không hỗ trợ kiểu unsigned integer. Nếu bạn chỉ định một số vượt qua biên của kiểu dữ liệu integer, nó sẽ được xem như kiểu float. Tương tự như vậy, khi bạn thực hiện một phép toán mà kết quả trả về là một số vượt qua biên của kiểu integer, thì kiểu float sẽ được trả về. Tuy nhiên, có một lỗi trong PHP mà không phải bao giờ điều này cũng đúng, nó liên quan đến các số âm. Chẳng hạn, khi bạn thực hiện -50000* $million, kết quả sẽ là 429496728. Tuy nhiên, khi cả hai toán tử đều là số dương thì không có vấn đề gì xảy ra.

Kiểu số thực(floats,doubles,hay real numbers)

có thể được chỉ định bằng cách sử dụng một trong các cú pháp sau:

1$a = 1.234; $a = 1.2e3; $a = 7E-10;

Kích cỡ của kiểu float tùy thuộc vào platform, giá trị lớn nhất là xấp xỉ 1.8e308

String

Là những chuỗi các kí tự. Trong PHP,một kí tự cũng tương tự như một byte,do đó có chính xác 256 kí tự khác nhau. Cú pháp: có thể khai báo bằng ba cách khác nhau như sau:

    1. Dấu nháy đơn: cách dễ dàng nhất để chỉ định một chuỗi đơn giản là đóng nó trong một dấu nháy đơn.Ví dụ:echo 'le bao vy';
    1. Dấu nháy kép: nếu chuỗi được đóng trong dấu nháy kép("),PHP hiểu sẽ có thêm các chuỗi cho các kí tự đặc biệt ..... Ví dụ: \n;\t;\\;\$;…
    1. Heredoc: các khác để phân định chuỗi là sử dụng cú pháp ("<<<"). Chỉ nên cung cấp một định danh sau <<<, sau đó là chuỗi và tiếp là cùng tên định danh để đóng dấu nháy. Định danh dùng để đóng phải bắt đầu bằng cột đầu tiên của dòng. Định danh được dùng phải có tên giống như trong các quy luật đặt tên biến trong PHP.

Để kiểm tra kiểu dữ liệu hiện tại của biến ta dùng các hàm Ctype Functions, các hàm này mặc định đã có sẵn trong PHP 4.3 trở lên

  • ctype_alnum — Kiểm tra biến có chứa cả số và ký tự không
  • ctype_alpha — Kiểm tra biến có phải chứa chỉ chưa duy nhất các ký tự A-Z(Alpha)
  • ctype_cntrl — Kiểm tra biến có phải chứa các ký tự đặc biệt hay không
  • ctype_digit — Kiểm tra biến có chứa phải là 1 số không
  • ctype_graph — Kiểm tra nếu tất cả các ký tự trong chuỗi cung cấp, văn bản, tạo đầu ra nhìn thấy được.
  • ctype_lower — Kiểm tra các ký tự chữ thường
  • ctype_print — Kiểm tra các ký tự in được
  • ctype_punct — Kiểm tra cho bất kỳ ký tự in được mà không phải là một khoảng trắng hay ký tự chữ và số
  • ctype_space — Kiểm tra các ký tự khoảng trắng
  • ctype_upper — Kiểm tra các ký tự chữ hoa
  • ctype_xdigit — Kiểm tra các ký tựđại diện cho một chữ số thập lục phân


Ví dụ của các hàm trên

Example #1 A ctype_alnum() example

01
02$strings = array('AbCd1zyZ9', 'foo!#$bar');
03foreach ($strings as $testcase) {
04 if (ctype_alnum($testcase)) {
05 echo "The string $testcase consists of all letters or digits.\n";
06 } else {
07 echo "The string $testcase does not consist of all letters or digits.\n";
08 }
09}
10?>

Kết quả xuất ra là :
The string AbCd1zyZ9 consists of all letters or digits.
The string foo!#$bar does not consist of all letters or digits.

Example #1 A ctype_alpha() example

01
02$strings = array('KjgWZC', 'arf12');
03foreach ($strings as $testcase) {
04 if (ctype_alpha($testcase)) {
05 echo "The string $testcase consists of all letters.\n";
06 } else {
07 echo "The string $testcase does not consist of all letters.\n";
08 }
09}
10?>

Kết quả xuất ra là :
The string KjgWZC consists of all letters.
The string arf12 does not consist of all letters.

Example #1 A ctype_cntrl() example

01
02$strings = array('string1' => "\n\r\t", 'string2' => 'arf12');
03foreach ($strings as $name => $testcase) {
04 if (ctype_cntrl($testcase)) {
05 echo "The string '$name' consists of all control characters.\n";
06 } else {
07 echo "The string '$name' does not consist of all control characters.\n";
08 }
09}
10?>

Kết quả xuất ra là
The string 'string1' consists of all control characters.
The string 'string2' does not consist of all control characters.

Example #1 A ctype_digit() example

01
02$strings = array('1820.20', '10002', 'wsl!12');
03foreach ($strings as $testcase) {
04 if (ctype_digit($testcase)) {
05 echo "The string $testcase consists of all digits.\n";
06 } else {
07 echo "The string $testcase does not consist of all digits.\n";
08 }
09}
10?>

Kết quả xuất ra là :
The string 1820.20 does not consist of all digits.
The string 10002 consists of all digits.
The string wsl!12 does not consist of all digits.

Example #2 A ctype_digit() example ,So sánh chuỗi với số

01
02
03$numeric_string = '42';
04$integer = 42;
05
06ctype_digit($numeric_string); // true
07ctype_digit($integer); // false
08
09is_numeric($numeric_string); // true
10is_numeric($integer); // true
11?>

Example #1 A ctype_graph() example

01
02$strings = array('string1' => "asdf\n\r\t", 'string2' => 'arf12', 'string3' => 'LKA#@%.54');
03foreach ($strings as $name => $testcase) {
04 if (ctype_graph($testcase)) {
05 echo "The string '$name' consists of all (visibly) printable characters.\n";
06 } else {
07 echo "The string '$name' does not consist of all (visibly) printable characters.\n";
08 }
09}
10?>

Kết quả xuất ra là :
The string 'string1' does not consist of all (visibly) printable characters.
The string 'string2' consists of all (visibly) printable characters.
The string 'string3' consists of all (visibly) printable characters.

Example #1 A ctype_lower() example

01
02$strings = array('aac123', 'qiutoas', 'QASsdks');
03foreach ($strings as $testcase) {
04 if (ctype_lower($testcase)) {
05 echo "The string $testcase consists of all lowercase letters.\n";
06 } else {
07 echo "The string $testcase does not consist of all lowercase letters.\n";
08 }
09}
10?>

Kết quả xuất ra là :
The string aac123 does not consist of all lowercase letters.
The string qiutoas consists of all lowercase letters.
The string QASsdks does not consist of all lowercase letters.

Example #1 A ctype_print() example

01
02$strings = array('string1' => "asdf\n\r\t", 'string2' => 'arf12', 'string3' => 'LKA#@%.54');
03foreach ($strings as $name => $testcase) {
04 if (ctype_print($testcase)) {
05 echo "The string '$name' consists of all printable characters.\n";
06 } else {
07 echo "The string '$name' does not consist of all printable characters.\n";
08 }
09}
10?>

Kết quả xuất ra là :
The string 'string1' does not consist of all printable characters.
The string 'string2' consists of all printable characters.
The string 'string3' consists of all printable characters.

Example #1 A ctype_punct() example

01
02$strings = array('ABasdk!@!$#', '!@ # $', '*&$()');
03foreach ($strings as $testcase) {
04 if (ctype_punct($testcase)) {
05 echo "The string $testcase consists of all punctuation.\n";
06 } else {
07 echo "The string $testcase does not consist of all punctuation.\n";
08 }
09}
10?>

Kết qua xuất ra là
The string ABasdk!@!$# does not consist of all punctuation.
The string !@ # $ does not consist of all punctuation.
The string *&$() consists of all punctuation.

Example #1 A ctype_space() example

01
02$strings = array('string1' => "\n\r\t", 'string2' => "\narf12", 'string3' => '\n\r\t');
03foreach ($strings as $name => $testcase) {
04 if (ctype_space($testcase)) {
05 echo "The string '$name' consists of all whitespace characters.\n";
06 } else {
07 echo "The string '$name' does not consist of all whitespace characters.\n";
08 }
09}
10?>

Kết quả xuất ra là:
The string 'string1' consists of all whitespace characters.
The string 'string2' does not consist of all whitespace characters.
The string 'string3' does not consist of all whitespace characters.

Example #1 A ctype_upper() example

01
02$strings = array('AKLWC139', 'LMNSDO', 'akwSKWsm');
03foreach ($strings as $testcase) {
04 if (ctype_upper($testcase)) {
05 echo "The string $testcase consists of all uppercase letters.\n";
06 } else {
07 echo "The string $testcase does not consist of all uppercase letters.\n";
08 }
09}
10?>

Kết quả xuất ra là
The string AKLWC139 does not consist of all uppercase letters.
The string LMNSDO consists of all uppercase letters.
The string akwSKWsm does not consist of all uppercase letters.

Example #1 A ctype_xdigit() example

01
02$strings = array('AB10BC99', 'AR1012', 'ab12bc99');
03foreach ($strings as $testcase) {
04 if (ctype_xdigit($testcase)) {
05 echo "The string $testcase consists of all hexadecimal digits.\n";
06 } else {
07 echo "The string $testcase does not consist of all hexadecimal digits.\n";
08 }
09}
10?>

Kết quả xuất ra là :
The string AB10BC99 consists of all hexadecimal digits.
The string AR1012 does not consist of all hexadecimal digits.
The string ab12bc99 consists of all hexadecimal digits.


RefLink: http://thanhleduy.blogspot.com/2011/03/kiem-tra-kieu-du-lieu-trong-php.html