Bài 02 – Khai báo biến và phạm vi sử dụng biến trong PHP 5

Sharing is caring!

Chào mí bạn, mình đã trở lại nhưng không có lợi hại hơn xưa, vẫn như cũ. Hôm nay, chúng ta sẽ tìm hiểu tiếp một phần khá là quan trọng cửa một công việc lập trình đó là cách khai báo biến cũng như phạm vi sử dụng của biến nhé.

1. Khai báo biến – Declare Variable

Biến(Variable) là một vùng nhớ tạm trên RAM để lưu trữ những giá trị tạm thời(số, ký tự, chuổi, object….), và các giá trị này có thể không đổi hoặc bị thay đổi trong quá trình thực thi các dòng lệnh. Viết code bằng PHP giàu lắm các bạn, toàn là dollar không à Happy-Grin . Trong PHP, bất kỳ một biến nào khi khai báo thì phải bắt đầu bằng ký tự $ và phân biệt chữ hoa, chữ thường.

Ngoại trừ 2 cái quy luật như đã nói là tên biến bắt đầu bằng ký tự $ và có phân biệt chữ hoa chữ thường thì các bạn phải nhớ thêm một số quy luật sau:

  1. Ký tự kế tiếp dấu $ phải là ký tự “_” hoặc là a-z, A-Z.
  2. Ký tự kế tiếp dấu $ không được là con số từ 0 đến 9.
  3. Các ký tự tiếp theo(ký tự thứ 3 trở đi) có thể là a-z, A-Z, 0-9, _

Đọc xong thấy có vẻ rối rối nhỉ Worry, thôi thì các bạn xem cái hình nhé cho dễ mường tượng:

variable_nameing_rule1

Xem thêm một số ví dụ nhé:

Khai báo biến xong rồi, để xuất giá trị của biến ra màn hình(console hoặc webpage) thì ta dùng cái hàm echo hoặc print nha các bạn:

2. Biến tham chiếu – Variable Reference

Cái vụ biến tham chiếu này cũng điên lắm Cry-Out , để mình giải thích rõ cho các bạn hiểu nha. Ví dụ, mình có 2 cái biến tên là $a$b như sau:

Kết quả sẽ là:

Var a: 12

Var b: 12

After changed: Var a: 12, Var b: 14

Các bạn thấy, biến $a có giá trị là 10, biến $b được gán giá trị là biến $a, điều này có nghĩa PHP sẽ copy cái giá trị 12 của biến $a và gán cho biến $b khi đó hai biến $a và $b có cùng giá trị là 12 nhưng là 2 vùng nhớ khác nhau, cho nên nếu biến $b thay đổi giá trị (cụ thể là gán bằng 14) thì giá trị biến $a vẫn là 12. Xem hình sau:

var_ref_1

Vậy có cách nào khi gán biến $a cho biến $b mà khi biến $b thay đổi giá trị thì biến $a cũng thay đổi giá trị theo hoặc ngược lại thay đổi biến $a thì biến $b thay đổi theo? Xin thưa là có Wink , đó là dùng biến tham chiếu. Mình viết như vầy nha:

Kết quả là:

Var a: 12

Var b: 12

After changed: Var a: 14, Var b: 14

Các bạn dùng ký tự & đặt trước biến $a, khi đó mình gọi biến $b là một alias name của cái giá trị mà đang chứa trong biến $a. Khi đó, cả $a và $b đều trỏ về một vùng nhớ có giá trị là 12, cho nên nếu ta thay đổi giá trị của $a hay của $b đều làm thay đổi vùng nhớ có giá trị 12. Xem hình sau:

var_ref_2

 

3. Phạm vi sử dụng biến – Variable scope

Sự thay đổi giá trị của một biến phụ thuộc vào phạm vi sử dụng của nó. PHP có 4 loại phạm vi biến:

  1. Local
  2. Global
  3. Static
  4. Function Parameters

3.1. Local

Khi chúng ta khai báo một biến ở trong một hàm thì phạm vi của nó chỉ ở trong cái hàm đó thôi, ra khỏi hàm thì biến này không tồn tại. Các bạn xem ví dụ sau nha:

Kết quả là:

Local counter: 1

counter: 14

Biến $counter bên trong hàm addCounter() và $counter bên ngoài là hoàn toàn khác nhau. Như đã nói, biến $counter trong hàm addCounter() là biến local, nó chỉ hoạt động bên trong hàm mà thôi. Khi kết thúc hàm addCounter() thì biến $counter này cũng biến mất luôn. Cho nên biến $counter bên ngoài hàm sẽ không bị thay đổi giá trị, vẫn là 14.

3.2. Global

Biến mà khai báo bên trong hàm thì gọi là local vậy ngược lại biến nào mà khai báo bên ngoài hàm thì gọi là global, đơn giản vậy thôi á Delighted .

PHP mặc định là khi ta đứng trong một hàm thì ta không thể thấy cái biến global nào hết mặc dù ta có cái biến đó bên ngoài hàm. Nếu muốn dùng cái biến global bên trong hàm thì ta phải dùng từ khóa global trước cái biến đó. Làm như vậy nà mấy bạn:

Kết quả là:

Global counter: 15

Bạn thấy ha, biến $counter khai báo ngoài hàm thì nó là biến global. Trong hàm addCounter(), bạn đặt từ khóa global trước biến $counter thì biến $counter này chính là biến $counter bên ngoài hàm(line 8), sau đó mới tăng thêm 1 cho biến này và biến này bị thay đổi sau khi hàm addCounter() kết thúc. Kết quả là in ra số 15. Cũng dễ hiểu chứ mấy bạn?

Ngoài ra, chúng ta có thể dùng biến global bên trong hàm bằng cách sử dụng biến array có sẵn của PHP đó là $GLOBALS

Kết quả cũng ra tương tự. Tuy nhiên cách viết này ít dùng hơn, mình thì vẫn viết cách dùng từ khóa global nhiều hơn.

3.3. Static

Cũng giống như local, biến static chỉ được khai báo trong một hàm, nhưng khác một chổ là giá trị của nó vẫn được lưu lại mỗi khi hàm đó kết thúc, có nghĩa là cái biến static không bị mất đi khi kết thúc hàm, và khi ta gọi hàm này một lần nữa thì giá trị của biến static bên trong nó sẽ thay đổi so với giá trị ban đầu. Ta sử dụng từ khóa static ở trước cái biến nha, xem nhé:

Kết quả là:

Static counter: 5

Static counter: 6

Static counter: 7

Global counter: 12

Các bạn thấy, global counter vẫn là giá trị 12 trong khi biến static $counter trong hàm khi gọi hàm addCounter() lần một là 5, gọi lần hai sẽ là 6 và gọi lần ba sẽ là 7. Lý do là do lần đầu tiên gọi hàm addCounter() xong thì do là static nên biến $counter bên trong hàm addCounter() sẽ tăng lên 1 và giữ luôn giá trị đó. Khi gọi tiếp lần hai thì nó tăng giá trị hiện tại lên 1 thành 6 (do giá trị hiện tại là 5 cộng 1 là 6), tương tự cho lần ba.

Sau này khi đến phần lập trình hướng đối tượng thì các bạn sẽ gặp khái niệm static này, nó sẽ khác đi một chút so với biến static trong hàm.

3.4. Function parameters

Dùng để truyền một biến từ ngoài vào bên trong hàm nếu ta không muốn dùng từ khóa global.

Kết quả là:

My name is Thomas Edison

Đến bài function, mình sẽ tìm hiểu kỹ hơn về các kiểu truyền biến vào cho hàm.

Vậy là xong phần khai báo biến và phạm vi sử dụng của biến. Bài tiếp theo chúng ta sẽ tìm hiểu về các toán tử. THANK-YOU

Sharing is caring!

Bài 01- Kiểu dữ liệu trong PHP 5
Các loại toán tử trong PHP 5

Vincent Le

Tui là Lê Minh Đạt, tên tiếng anh là Vincent(do thích nhân vật Vincent Valentine, ai từng là fan của trò Final Fantasy VII thì sẽ biết nhân vật này, hehe). Đang tập tành làm một blogger viết về mảng lập trình, mong muốn được chia sẻ những gì đã học được, tích góp được trong 10 năm đi làm thợ code.

shares