Chương 4: Biến 

Chương 4 : Biến

Chú ý : đây là chương nền tảng cần nắm vững !
Biến là một yếu tố không thể thếu trong các ngôn ngữ lập trình, và trong PHP cũng vậy, mình không thể tránh khỏi ! Biến không phải là cái gì ngoằn ngoèo lắc léo mà trái lại nó làm cho cuộc đời trỡ nên đơn giản ! Thiếu nó, bạn không thể tiến xa hơn được !
Chương này khá dài, vì vậy bạn có thể đọc một nửa hôm nay, ngày mai một nửa. Bạn không nên bộp chộp vội vàng vì bạn sắp phải học những điều vô cùng quan trọng của PHP. Cuối chương bạn sẽ bắt đầu hiểu vì sao người ta thích PHP như vậy.

precedent chapter Mục Lục next chapter

Biến là gì ?

Ngay cái tên thôi mình cũng nghĩ đến cái gì đó biến đổi thường xuyên, một điều riêng duy nhất của biến là « có thể thay đổi được » ! Nhưng cụ thể biến là gì ?
Một biến, là một thông tin được chứa tạm thời trong bộ nhớ, nó không tồn tại lâu. Biến (hay thông tin) trong PHP chỉ tồn tại trong thời gian server phát sinh trang web (xem chương 1). Sau khi đã phát sinh xong trang web, tất cả các biến đều bị xóa đi vì chúng không còn dùng để làm gì nữa. Biến không phải như một file được chứa trong ổ cứng mà chỉ là một thông tin nhỏ tạm thời.
Chính bạn là người tạo ra biến khi cần dùng đến.
Một biến gồm 2 thành phần:
  • Tên biến: để nhận ra nó là gì, dùng để làm gì, bạn nên cho nó một cái tên dễ nhận biết một chút, ví dụ như “tuoi_cua_toi”
  • Giá trị của biến: là thông tin mà biến chứa, giá trị của biến có thể thay đổi, ví dụ “21 tuoi”.

Ở đây tôi đã cho một ví dụ về một biến có tên là “tuoi_cua_toi”, biến này có giá trị là “21 tuoi”.
Mình có thể sửa đổi khi cần đến giá trị của biến, hay thực hiện vài thao tác trên biến,… Khi đó mình sẽ gọi (tên) biến ra, và biến sẽ lịch sự cho mình biết giá trị của nó.
Ví dụ một thời điểm nào đó, bạn gọi:
    -Ê biến tuoi_cua_toi, chú chứa cái gì đó?
    -21 tuoi
    -Cảm ơn nghen!
Bạn sẽ thấy mấy thứ nhăng nhít này (ngay khi nó còn mơ hồ, chưa rõ nghĩa lắm) sẽ rất cần thiết cho trang web của bạn!
Ví dụ bạn muốn lấy tên hoặc nickname của một thành viên nào đó, bạn sẽ dùng một biến ten_thanh_vien chẳng hạn, rồi bạn chứa tên một thành viên nào đó trong biến này (khoai lang chẳng hạn). Rồi khi thành viên này đăng nhập vào trang web hay diễn đàn của bạn, bạn sẽ cho in ra hàng này: Xin chào Khoai lang!
Hẳn bạn đã biết làm sao để in ra text rồi nhỉ? Lệnh echo mà tôi đã nói ở chương trước sẽ giúp bạn chuyện này dễ dàng.
Bây giờ chúng ta hãy xem làm sao để sử dụng biến trong PHP nhé!

Gán và hiển thị

Bây giờ mình sẽ thử gán một giá trị cho biến, rồi hiển thị (in) ra giá trị đó. Bạn sẽ hiểu rõ hơn cách sử dụng biến.
Gán một giá trị cho một biến:
Ví dụ, nếu mình gõ vào như sau:
<?php
$ten_thanh_vien = “Khoai Lang”;
?>

Nếu viết như vậy, bạn đã tạo ra một biến tên là “ten_thanh_vien” và biến này chứa giá trị là “Khoai Lang”!
Chú ý: Tên biến không thể chứa khoảng trắng, thay vì khoảng trắng bạn nên dùng dấu gạch dưới (underscore) _ dấu này nằm chung với phím số 8 trên bàn phím đấy. Nên tránh gõ dấu hay bất cứ kí hiệu nào khác cho biến, PHP không thích lắm, trái lại trong phần giá trị của biến bạn có thể viết bất cứ thứ gì bạn muốn!
Có vài kí hiệu mới nhỉ? Trước hết là dấu đô la ($), nó phải luôn luôn được đặt ở đầu tên biến. Đó là dấu hiệu để PHP nhận ra “à, thằng này là một biến đây!”. Không những PHP mà bạn cũng nhận ra nó là một biến khi bạn đọc code ở đâu đó khi bạn thấy dấu $ .
Kế đến là dấu bằng (=) dùng để chỉ phép gán, giống như trong Pascal mình hay dùng dấu mũi tên <-- để gán giá trị cho một biến ấy mà.Ví dụ viết $a<-- 15 thì có nghĩa là mình gán giá trị 15 cho biến a, trong php thì viết là $a = 15;. Nói nôm na gán cũng như áp đặt cho biến một giá trị nào đó. (mà mình có thể thay đổi nếu cần)
Tiếp theo là một giá trị của biến được gán vào, chữ Khoai lang được đặt trong dấu ngoặc kép vì nó là giá trị kiểu text. Và cuối cùng xin đừng quên dấu chấm phẩy (;) để kết thúc một câu lệnh.
Cụ thể mà nói thì code này sẽ hiển thị ra như thế nào?
Chả ra gì cả! Bởi bạn chưa dùng lệnh echo mà, cho tới giờ PHP chỉ tạo ra một biến và gán cho nó một giá trị rồi giữ tạm thời trong bộ nhớ thôi, chứ chưa làm gì khác!
Biến không nhất thiết phải chứa text, mà mình có thể gán cho nó một giá trị số hay giá trị logic (đúng sai) cũng được!
Mình hãy cho 3 ví dụ về 3 kiểu “dữ liệu” khác nhau mà biến có thể chứa nhé!
  • text: Cái này tôi vừa cho ví dụ, để cho biến một giá trị text, mình đặt nó trong dấu ngoặc kép như vầy:
    <?php $ten_thanh_vien = “Khoai Lang”; ?>

  • số: chỉ khác với text ở chỗ là mình không cần phải đặt vào giữa hai dấu ngoặc kép thôi:
    <?php $so_anh_em = 5; ?>

  • giá trị logic: chỉ có hai giá trị là ĐÚNG (true) hoặc SAI (false). Để phân biệt với giá trị text, mình không gõ dấu ngoặc kép cho true và false, ví dụ:
    <?php
    $toi_rat_gioi_php = false;
    $toi_la_beginner = true;
    ?>

Bạn sẽ hiểu rõ hơn về giá trị logic này trong chương sử dụng điều kiện.
Hiển thị (in ra) giá trị của một biến :
Đơn giản chỉ dùng lệnh echo mà bạn đã biết, ví dụ :
<?php
echo  "$ten_thanh_vien " ;
?>

Nó in ra cái gì vậy? Tuyệt, tuyệt, nó in ra “khoai lang” kìa!
Bạn hãy thử cho vài giá trị khác nhau bắt nó in ra thử xem!
Với cấu trúc lệnh echo, bạn không nhất thiết chỉ in ra giá trị của biến, ví dụ:
<?php
$ten_thanh_vien = “Khoai Lang”;
echo "xin chao $ten_thanh_vien ! ";
?>

Nó sẽ in ra : xin chao khoai lang!
Bạn hãy thử cho thêm vài biến bên trong echo xem sao!

Vài tính toán đơn giản


Mình khoan tính toán cái gì ngoằn ngoèo rắc rối vội, chỉ đơn giản cộng trừ nhân chia thôi nhé!
Mình sẽ chỉ làm việc với những biến chứa giá trị số, đây là 4 kí hiệu cần biết : +, -, *, / (chắc bạn không lạ gì chúng phải không?)
Vài ví dụ:
<?php
$num = 2+4;// $num nhận giá trị là 6
$num = 5-1;// $num nhận giá trị là 4
$num = 3*4;// $num nhận giá trị là 12
$num = 10/2;// $num nhận giá trị là 5
// phức tạp tí xíu nhé
$num = 3*5+1;// $num nhận giá trị là 16
$num = (1+2)*2;// $num nhận giá trị là 6
?>

Đây là những tính toán với nhiều biến:
<?php
$num = 10;
$result = ($num +5)*$num; // $result sẽ nhận giá trị là 150
?>

Bạn thử kiểm chứng lại xem (dùng lệnh echo in chúng ra như đã làm ở trên).

Chuyển biến

Một thú vị của PHP: mình có thể chuyển một biến từ trang này sang trang khác!
Bạn sẽ thấy điều này vô cùng tiện lợi, ví dụ chuyển biến $ten_thanh_vien từ trang này sang trang khác! Như tôi đã nói, biến sẽ bị hủy đi sau khi trang web được phát sinh xong. Vậy làm sao lấy biến $ten_thanh_vien vào trang khác được???

Vận chuyển bằng cách thay đổi address

Bạn có bao giờ thấy một địa chỉ (address) dài ngoằn như thế này chưa:
http://www.mysite.com/info.php?ngay=27&thang=08&nam=2007&title=informations
Mấy biến của bạn nằm trong đó đấy! Đây là một cách chuyển biến từ trang này sang trang khác!
Nó hoạt động thế nào ta?
Như bạn đã biết, để tạo một link trong HTML, mình dùng tag <a>, chẳng hạn:
<a href="http://www.mysite.com/info.php"> click here to access my site </a>
Sau chữ info.php, bạn đánh một dấu chấm hỏi (?), kế tiếp là tên biến, rồi dấu bằng, rồi giá trị của biến
http://www.mysite.com/info.php?ngay=27
Cái này sẽ tạo tự động một biến đặt biệt tên là $_GET[“ngay”] có giá trị là 27
Nếu bạn muốn tạo thêm biến khác, bạn chỉ cần đặt vào dấu & rồi tên biến mới, dấu bằng, giá trị của nó!
Chú ý, trong code HTML bạn không được gõ trực tiếp dấu &, mà thay bằng code của HTML tương ứng (&amp;)
Ví dụ:
http://www.mysite.com/info.php?ngay=27&amp;thang=08&amp;nam=2007&amp;title=informations
Tất cả kí hiệu &amp; sẽ được trình duyệt của bạn chuyển thành &
Ở đây, 4 biến đặc biệt đã được tạo :
  • $_GET[‘ngay’] có giá trị là 27
  • $_GET[‘thang’] có giá trị là 08
  • $_GET[‘nam’] có giá trị là 2007
  • $_GET[‘title’] có giá trị là « informations »
Tôi nhận thấy rằng mấy biến này có hình dạng kì cục quá ! Nhưng đừng vì vậy mà bạn nản lòng dừng lại nhé !
Mình hãy làm một ví dụ nhỏ để bạn thấy nó sẽ cho ra kết quả cụ thể như thế nào !
Để thực hiện, mình cần 2 trang :
Một trang chứa cái tag <a href="http://www.mysite.com/info.php"> click here to access my site </a>
Một trang để lấy biến và giá trị của nó được chuyển đến!
Code : HTML
<p>
    Trang này chỉ chứa mã HTML.<br>
    Đây là 3 link dẫn đến trang cible.php, Với các biến có giá trị khác nhau :
</p>
<p>
   <a href="cible.php?ho=Nguyen&ten=Tra">Link dẫn đến trang cible.php?ho=Nguyen&ten=Tra</a><br>
   <a href="cible.php?ho=Tran&ten=Truong">Link dẫn đến trang cible.php?ho=Tran&ten=Truong </a><br>
   <a href="cible.php?ho=Thai&ten=Long">Link dẫn đến trang cible.php?ho=Thai&ten =Long </a><br>
</p>

Code : PHP
<p>Xin chào !</p>
<p>Họ của bạn là <?php echo $_GET['ho']; ?> , và tên của bạn là <?php echo $_GET['ten']; ?> .</p>
<p>Thử một cái khác đi, <a href="diemdanh.php">click here</a> để trở lại trang diemdanh.php </p>
Phào, bạn thấy sao ? Dễ chịu chứ nhỉ ?
Bạn bắt đầu để ý một điều thú vị của php rằng : source code của trang cible.php có chút xíu, mà trang web lại hiện ra mỗi lần mỗi khác !
Tạm dừng ở đây để xem bạn tự test vài ví dụ nữa để làm quen với cách chuyển đổi biến kiểu này nhé !

Chuyển biến bằng trình đơn (formulaire ; form)

Một cách khác để chuyển biến từ trang này sang trang khác là dùng trình đơn (form), với những vùng gõ text, những ô vuông để chọn, những nút options,…
Tôi dành hẳn một chương để nói về mấy vụ form này (phần III), coi vậy chứ cũng rắc rối lắm. Còn bây giờ mình hãy làm những cái đơn giản nhưng thường gặp thôi nhé !
Cái đơn giản nhất là vùng text.
Bạn đã gõ text vào vùng text trên một trang web lần nào chưa ? Tôi dám cá là nhiều lắm rồi, bạn gõ vô tội vạ bất cứ thứ gì có thể gõ được khi comment trong blog của tui đó mà ! Ha ha, đùa tí thôi !
Như vậy là bạn đã biết vùng text là cái gì rồi đấy, mục đích của mình bây giờ là làm sao để thu lại những gì mà ai đó đã gõ vào !
Làm như hồi nãy, mình cần một trang trên là diemdanh.php có vùng text để gõ text vào, và một trang tên là cible.php để hiển thị ra cái gì mình đã gõ !
Code : HTML
<p>
    Trang này cũng chỉ chứa code HTML.<br>
    Hãy cho biết tên của bạn :
</p>
<form action="cible.php" method="post">
<p>
<input type="text" name="ten" /> <input type="submit" value="Send" />
</p>
</form>
Code : PHP
<p>Xin chào !</p>
<p>Hê hê, tôi biết bạn tên gì rồi. Bạn tên là <?php echo $_POST['ten']; ?> chứ gì !</p>
<p>Nếu bạn muốn đổi tên, <a href="diemdanh.php">click vào đây</a> để trỡ lại trang diemdanh.php</p>
Chú ý : nếu mình muốn thu lại giá trị từ một form, mình dùng biến $_POST['xxxx']
Nếu muốn thu hồi giá trị từ một address, mình dùng biến $_GET['xxxx']
Bạn hãy thử cho quen với cách thu hồi biến kiểu form này đi nhé ! Chúc vui vẻ với những cái tên quái gở mà bạn sắp phát minh ra ! Nhưng hãy nhớ mục đích của mình là hiểu được cơ chế hoạt động của nó !
Ở đây chỉ có mỗi một thứ cần hiểu là « action » chỉ ra trang web sẽ hiển thị ra những gì mình sắp gõ vào khi mình nhấp vào nút Send, còn tên của vùng text sẽ là tên biến được tạo !
<input type="text" name="ten" />
Tên của vùng text ở đây là “ten”. Trong trang cible.php, một biến $_POST['ten'] sẽ được tạo và sẽ mang giá trị là những gì bạn gõ vào trong vùng text.


Copyright© NGUYỄN Thanh Trà