Biến, hằng và kiểu dữ liệu

      Trong chương 1, chúng ta đã biết qua về biến PHP và đã thấy một cách ngắn gọn về việc sử dụng chúng như thế nào. Như chúng ta đã biết, các biến PHP phải bắt đầu với ký tự dollar ($) và trong PHP các biến có thể bao gồm kiểu dữ liệu bất kỳ và không phải bị giới hạn trước là một chuỗi ký tự, số nguyên, vv. Chúng ta cũng đã thấy chúng ta có thể sử dụng các biến PHP để trích dữ liệu từ một Form HTML như thế nào.

      Trong phần này, chúng ta sẽ tìm hiểu chi tiết hơn về biếnkiểu dữ liệu. Chúng ta sẽ xem xét đầy đủ về các kiểu dữ liệu chi tiết hơn và chúng ta sẽ tìm hiểu một số hàm để chúng ta thao tác các biến. Chúng ta cũng sẽ thấy cách gán một tên tới một giá trị Hằng như thế nào.


Kiểu dữ liệu

      PHP có ba kiểu dữ liệu cơ bản: integer, doublestring. Cũng có những kiểu dữ liệu không cơ bản cụ thể là mảng (arrays)đối tượng (objects), chúng sẽ được thảo luận trong phần sau. Tất cả các biến có một kiểu xác định, Chắc chúng ta còn nhớ, kiểu của biến có thể thay đổi trong chương trình khi giá trị của biến thay đổi.

      Integer sử dụng 4 bytes của bộ nhớ, giá trị của nó trong khoảng -2 tỷ đến +2 tỷ. Kiểu Double là kiểu số thực, phạm vi biểu diễn \( \pm ( 10^{-308} \div 10^{308}) \)Kiểu string dùng để chứa các giá trị bao gồm các ký tự và số.

2          // Đây là số nguyên

2.0        // Đây là số thực

"2"        // Đây là chuỗi ký tự

"2 hours"  // Đây là chuỗi ký tự khác

      Nhiều ngôn ngữ bao gồm một kiểu dữ liệu Boolean để tương ứng với các giá trị logic TRUEFALSE . PHP thì không. Nó sử dụng các biểu thức của ba kiểu cơ bản khác để đán giá các giá trị là đúng hoặc sai. Giữa các số nguyên, 0 được đánh giá là một giá trị sai và các số nguyên khác không được đánh giá là giá trị đúng. Cũng như vậy, giá trị số thực 0.0 (hoặc tương đương, chẳng hạn 0.0000) được đánh giá là FALSE và các giá trị khác 0 được đánh giá là TRUE. Giữa các chuỗi ký tự, chuỗi rỗng được đánh giá là FALSE. Chuỗi rỗng được mô tả là một cặp dấu nháy kép: “”. Các chuỗi không rỗng được đánh giá là TRUE.


Hằng

     Hằng là là đại lượng có giá trị không đổi. Chúng ta thường dùng Hằng để lưu các giá trị không đổi trong suốt chương trình như: nhiệt độ (\( 3^oC \)), pi (gần bằng 3.14) và giá trị của noon (12:00). Trong ngôn ngữ lập trình, có hai loại hằng: hằng chữhằng biểu tượng. Hằng chữ là các giá trị không đổi đơn giản để được tham chiếu trực tiếp, không sử dụng từ định danh.

     Khi chúng ta sử dụng hằng, chúng ta thường tham chiếu tới hằng biểu tượng. Hằng biểu tượng là một cách thuận lợi để gán một giá trị một lần tới một định danh và sau đó tham chiếu tới nó bằng cách định danh trong suốt chương trình của chúng ta.

      Ví dụ, tên của công ty chúng ta là giá trị hằng. Như vậy, chuỗi chữ Phop’s Bicyclessẽ có trong khắp chương trình của chúng ta, chúng ta có thể định nghĩa hằng có tên COMPANY với giá trị Phop’s Bicycles và sử dụng hằng này để tham chiếu tới tên công ty trong suốt mã lệnh của chúng ta. Chú ý rằng tên hằng không giống tên biến, không bắt đầu bởi ký tự $.


Định nghĩa Hằng

Hàm define() được sử dụng để tạo Hằng:

define("COMPANY", "Phop's Bicycles");

define("YELLOW", "#FFFF00");

define("VERSION", 3); 

define("NL", "<BR>\n");

      Trong ví dụ trên, chúng ta định nghĩa một Hằng được gọi là NL để đại diện cho một thẻ ngắt dòng HTML. Về cơ bản, chúng ta đã tạo ra một đường tắt mã hóa khi <BR>\n  là một sự kết hợp thường được sử dụng phổ biến. Với qui ước này, những người lập trình định nghĩa các biến sử dụng tất cả các từ in hoa. Một biến có thể bao gồm số hoặc xâu bất kỳ. Khi một Hằng được định nghĩa, chúng có thể được sử dụng thay cho các giá trị của chúng.

echo("Employment at " . COMPANY . NL);

Điều này tương đương với:

echo("Employment at Phop's Bicycles<BR>\n");

Lưu ý rằng Hằng xuất hiện ngoài dấu ngoặc kép. Dòng:

echo("Employment at COMPANY NL");

Sẽ hiển thị trên trình duyệt là: "Employment at COMPANY NL"


Defined()

      Hàm Defined() cho phép chúng ta xác định có hay không một hằng tồn tại. Nó trả về 1 nếu hằng số tồn tại và 0 nếu hằng không tồn tại:

if (defined("YELLOW")) {

         echo ("<BODY BGCOLOR=" . YELLOW . ">\n");

}


Các hằng được xây dựng sẵn trong PHP

      PHP có các hằng được dựng sẵn. TRUEFALSE là được định nghĩa đầu tiên tương ứng với ccs giá trị là true (1)false (0 hoặc chuỗi rỗng). hằng  PHP_VERSION cho biết phiên bản của PHP mà hiện thời đang chạy, chẳng  hạn 3.0.11. Hằng PHP_OS cho biết hệ điều hành phía server đang chạy.

echo(PHP_OS);    // In ra "Linux" (ví dụ)

      __FILE____LINE__ giữ tên của kịch bản đang phân tích và số dòng hiện thời trong kịch bản. (Có hai ký tự đường gạch dưới trước và sau tên của các hằng này)

      PHP cũng có một số hằng thông báo lỗi: E_ERROR, E_WARNING, E_PARSEE_NOTICE.

<HTML>

<!-- phpinfo.php -->

<body>

              <?php

                  phpinfo()

              ?>

         </body>

</HTML>

Đoạn mã trên sẽ hiển thị:

php info


Khai báo và khởi tạo biến

      Cú pháp PHP chính là cú pháp trong ngôn ngữ C++, những ai làm quen với ngôn ngữ C++ thì có lợi thế trong lập trình PHP.

      Khác với hằng, biến tự động được khai báo trong PHP khi chúng ta gán một giá trị tới nó. Việc gán giá trị rất đơn giản bằng cách sử dụng toán tử (=). Chú ý rằng toán tử (=)(==) là khác nhau trong PHP. Chúng ta sẽ thấy điều này trong các phần tiếp theo.

$num_rows = 10;

$product = "Tire Pump";

$price = 22.00;

$shipping = 5.00;

$total = $price + $shipping;


Lừa kiểu và ép kiểu

      Như đã đề cập phần trước, mọi biến PHP có một kiểu dữ liệu. Kiểu dữ liệu đó được quyết định một cách tự động bởi giá trị mà nó được gán cho biến.

$a = 1;     // $a là số nguyên

$a = 1.2;   // Bây giờ nó là số thực

$a = "A";   // Bây giờ nó là chuỗi

      Khi chúng ta học những phần tiếp theo, cũng có nhiều cách để chỉ định rõ ràng kiểu dữ liệu của biến.


Chuyển đổi chuỗi và lừa kiểu

      Nếu chúng ta thực hiện một số thao tác trên chuỗi ký tự, PHP sẽ đánh giá chuỗi ký tự là một số. Điều này được gọi là chuyển đổi chuỗi, mặc dù biến chứa chuỗi có thể không cần thiết thay đổi. Trong ví dụ sau, $str được gán một giá trị chuỗi ký tự:

$str = "222B Baker Street";

      Nếu chúng ta cố gắng tăng thêm giá trị nguyên là 3 vào $str, $str sẽ đánh giá với số nguyên là 222 để phục vụ mục đích tính toán:

$x = 3 + $str;   // $x = 225;

Nhưng biến $str không thay đổi:

echo ($str);   // Prints: "222B Baker Street"


Chuyển đổi chuỗi đi theo sau một cặp luật:

  • Chỉ phần đầu của chuỗi được đánh giá là số. Nếu chuỗi bắt đầu với giá trị số hợp lệ, chuỗi sẽ đánh giá là giá trị đó; ngoài ra nó sẽ đánh giá là 0. Chuỗi “3rd degree” sẽ đánh giá là 3 nếu sử dụng một toán tử số nhưng chuỗi “Catch 22” sẽ đánh giá là 0.

  • Một chuỗi được đánh giá là số thực duy nhất nếu giá trị số thực được mô tả bao gồm toàn chuỗi ký tự. Các chuỗi “3.14”, “-4.01” và “4.2e6” sẽ được đánh giá là các số thực 3.4, -4.01 và 4.2000000. Tuy nhiên nếu các ký tự khác không phải là số thực có ở trong chuỗi, chuỗi sẽ đánh giá là số nguyên: “3.4 children” sẽ được đánh giá là số nguyên 3. Chuỗi “-4.01 degree” sẽ được đánh giá là số nguyên -4.

      Ngoài việc chuyển đổi chuỗi, PHP thực hiện lừa kiểu giữa hai kiểu số. Nếu chúng ta thực hiện một thao tác số giữa một số thực và một số nguyên, kết quả sẽ là một số thực:

$a = 1;           // $a là số nguyên

$b = 1.0;         // $b là số thực

$c = $a + $b;     // $c là số thực (value 2.0)

$d = $c + "6th";  // $d là số thực (value 8.0)

  

Ép kiểu

      Ép kiểu cho phép chúng ta thay đổi dứt khoát kiểu dữ liệu của biến:

$a = 11.2;        // $a là số thực

$a = (int) $a     // Bây giờ nó là số nguyên (value 11)

$a = (double) $a  // Bây giờ nó trở lại là số thực (value 11.0)

$b = (string) $a  // $b là chuỗi ký tự (value "11")

      Mảng và đối tượng cũng được phép. Integer là giống với int. floatreal là giống với double.

Biến động

      PHP hỗ trợ biến động (variable variables). Các biến thông thường có các giá trị động: Chúng ta có thể thiết lập và thay đổi giá trị của biến. Với biến động, tên của biến là động. Biến động thường tạo ra nhiều nhầm lẫn hơn là sự tiện lợi (đặc biệt là khi sử dụng mảng). Chúng ta thường ít sử dụng biến động vì trong thực tế chúng mang lại lợi ích rất ít. Đây là một ví dụ về biến động.

$field = "ProductID";

$$field = "432BB";

      Dòng đầu tiên của đoạn mã trên tạo ra một biến $field và gán giá trị là “ProductID”. Dòng thứ hai sử dụng giá trị của biến đầu tiên để tạo tên của biến thứ hai. Biến thứ hai có tên $ProductID và có giá trị “432BB”. Hai dòng mã lệnh sau sẽ thực thi để hiển thị ra như thế này:

echo ($ProductID); // In ra: 432BB

echo ($$field);    // In ra: 432BB

 

Các hàm hữu ích cho biến

PHP có một số hàm được xây dựng sẵn để làm việc với biến.

gettype()

      gettype() xác định kiểu dữ liệu của biến. Nó trả về một trong các giá trị sau:

  •  "integer"

  • "double"

  • "string"

  • "array"

  • "object"

  • "class"

  • "unknown type"

      Chúng ta xem chi tiết hơn trên mảng, đối tượng và lớp trong các phần sau. Ví dụ về sử dụng gettype() có thể là:

if (gettype ($user_input) == "integer") {

     $age = $user_input;

}

settype()

      Hàm settype() thiết lập kiểu cho biến. Kiểu được viết là chuỗi và có thể là một trong các kiểu sau: array, double, integer, object hoặc string. Nếu kiểu không thể thiết lập thì một giá trị FALSE được trả về.

$a = 7.5;                          // $a là số thực

settype($a,"integer");   //Bây giờ nó là số nguyên(giá trị 7)

      settype() trả về một giá trị TRUE nếu quá trình chuyển đổi là thành công. Ngược lại, nó trả về FALSE.

if (settype($a, "array")) {

     echo("Quá trình chuyển đổi thành công.");

} else {

     echo ("Quá trình chuyển đổi lỗi."); 

}  

isset() và unset()

      unset() được sử dụng để hủy biến. Hàm isset() được dùng để xác định biến có tồn tại không. Nếu biến tồn tại thì nó trả về TRUE.

$ProductID = "432BB";

if (isset($ProductID)) {

         echo("Dòng này được in ra");

}

unset($ProductID);

if (isset ($ProductID)) {

         echo("Dòng này sẽ không được in ra");

}

Empty()

      Empty() gần như đối ngược hoàn toàn với isset(). Nó trả về TRUE nếu biến không được thiết lập hoặc có một giá trị 0 hoặc một chuỗi rỗng. Ngoài ra nó trả về FALSE.

echo empty($new);       // true

$new = 1;

echo empty($new);       // false

$new = "";

echo empty($new);       // true

$new = 0;

echo empty($new);       // true

$new = "Buon giorno";

echo empty($new);       // false

unset ($new);

echo empty($new);       // true

 

Hàm is…()

      Hàm is_int(), is_integer() và is_long() là các hàm giống nhau để quyết định một biến là một số nguyên.

      is_double(), is_float() và is_real() quyết định một biến là một số thực.

      is_string(), is_array() và is_object() làm việc giống như các kiểu dữ liệu tương ứng của chúng.

$ProductID = "432BB";

if (is_string ($ProductID)) {

         echo ("String");

}

Hàm …val()

      PHP cung cấp cách khác để thiết lập rõ rang kiểu dữ liệu của biến: các hàm intval(), doubleval() strval(). Các hàm này không sử dụng được để chuyển đổi mảng và đối tượng.

$ProductID = "432BB";

$i = intval($ProductID);       // $i = 432;