AN TÂM ĐỨC - ĐÀO TẠO LẬP TRÌNH & THIẾT KẾ WEBSITE
Với chủ trương giúp các bạn không bị rơi vào “mê hồn trận” của những đoạn mã trộn lẫn lộn HTML+CSS+JavaScript+SQL+PHP, tôi cố gắng không đồng nhất việc nhập dữ liệu vào PHP với việc truyền dữ liệu thông qua trình duyệt (cũng như việc xuất dữ liệu ra màn hình với việc “trả về dữ liệu HTML cho trình duyệt”).
Hiểu điều này sẽ rất có lợi cho các bạn ở bài học kế, khi chúng ta bắt đầu “nhúng” mã PHP vào trong trang web.
Để cho phép người dùng đưa một giá trị từ bàn phím vào chương trình PHP, các bạn sử dụng cách thức như sau:
<?php
echo ‘Nhap vao mot gia tri bat ky: ‘;
$data = fgets(fopen(‘php://stdin’,'r’));echo ‘Ban vua nhap vao gia tri:’,”\n”;
echo $data;
?>
Dòng màu cam là cú pháp để chờ người dùng nhập dữ liệu vào từ bàn phím (kết thúc bởi phím Enter). Bạn chưa và không cần tìm hiểu đoạn mã phía sau dấu = đâu, chỉ cần chú ý$data là tên biến nhận giá trị mà người dùng nhập vào. Bạn có thể thay $data bằng bất cứ tên biến nào mà bạn thích. Kết quả chạy chương trình:
Ví dụ sau minh hoạ chương trình tính tổng 2 số bất kì nhập vào từ bàn phím:
<?php
echo ‘Chuong trinh tinh tong 2 so bat ky’,”\n”;
echo ‘Nhap so thu nhat A = ‘; $a = fgets(fopen(‘php://stdin’,'r’));
echo ‘Nhap so thu hai B = ‘; $b = fgets(fopen(‘php://stdin’,'r’));
echo $a, ‘ + ‘, $b, ‘ = ‘, $a+$b;
?>
Kết quả chạy chương trình như sau:
Để bắt đầu, chúng ta cùng nghiên cứu thắc mắc của bạn Phương (phù thuỷ lãng quên thời gian) trong bài tập trước:
Khi em check thủ công thế này
<?php
$a=aaakkkdfddd;
var_dump($a);
?>thì php vẫn chạy tốt
nhưng khi check thế này
<?php
$a=gfgdigdj gbhdug;
var_dump($a);
?>thì php báo lỗi check tương tự với các ký tự đặc biệt khác như ~@@#$% thì nó cũng báo lỗi
Để trả lời câu hỏi này, bạn Phương cần biết đến khái niệm “hằng”. Ở bài học trước, chúng ta đã nghiên cứu về biến và cách gán giá trị cho biến ($a = 5 chẳng hạn).
Trong khi biến là những giá trị biến thiên, có thể thay đổi được thì hằng là một giá trị cố định, không thay đổi được sau lần định nghĩa và gán giá trị đầu tiên. Hằng phân biệt với biến ở chỗ không có dấu $ đằng trước.
Để định nghĩa một hằng, các bạn dùng cú pháp như sau:
define(Pi, 3.141592654);
Tương tự như với biến, tên Hằng phân biệt chữ Hoa chữ thường và kiểu dữ liệu của Hằng phụ thuộc vào giá trị mà nó đang nắm giữ.
Dòng 3 định nghĩa Hằng tên Pi (P viết Hoa và i viết thường), vì thế chỉ có truy xuất Pi mới cho ra giá trị 3.141592654 trong khi các truy xuất pi, pI và PI cho ra giá trị trùng với tên hằng.
Đó là vì, khi bạn truy xuất đến một “hằng” chưa được định nghĩa và gán giá trị, PHP sẽ trả về đúng giá trị của chuỗi ký tự mà bạn đang truy xuất.
Đó là lý do trong đoạn code mà bạn Phương mang ra “thí nghiệm”:
<?php
$a=aaakkkdfddd;
var_dump($a);
?>
PHP sẽ diễn dịch rằng bạn Phương muốn khai báo một biến $a và gán cho biến $a này giá trị của một hằng tên là aaakkkdfddd. Tuy nhiên, do aaakkkdfddd chưa được định nghĩa từ trước như một tên hằng, nên PHP trả về chuỗi aaakkkdfddd và gán giá trị chuỗi này cho biến $a. Tức là, đoạn code trên của Phương sẽ tương đương với:
<?php
$a=’aaaakkkddd’;
var_dump($a);
?>
Tôi hiểu bạn Phương đang muốn thử gán cho $a một chuỗi nhưng bạn quên đưa dấu nháy đơn ‘ hoặc dấu nháy kép vô phần định nghĩa chuỗi. Nhưng PHP – như tôi đã nói – không đủ thông minh để phán đoán bạn muốn làm gì, nó chỉ đơn thuần thông dịch đúng từ trên xuống từ trái qua phải và vô tình đoạn code của bạn không bị “báo lỗi” khai báo sai cú pháp dữ liệu string!
Tuy nhiên, khi bạn viết tiếp thế này:
<?php
$a=gfgdigdj gbhdug;
var_dump($a);
?>
Thì PHP báo lỗi. Vì nó đã không “vô tình đúng” như ở ví dụ trên nữa rồi. Giả sử chúng ta thêm một dấu ; vào vị trí khoảng trắng thì chương trình sẽ hết lỗi ngay:
Do $a=gfgdigdj; được hiểu như một phép gán giá trị của hằng gfgdigdj vào cho biến $a còngbhdug; được coi như một biểu thức… không làm gì hết! (Giống như ở bài 2, tôi đề cập việc bạn có thể ghi 1; $a; $b; thì PHP vẫn coi là đúng, nó đơn thuần sẽ “chạy qua” mà không làm gì cả).
Tại sao PHP đã có biến lại còn phải “đẻ ra” hằng? Sau này học về hàm (funtions) bạn sẽ biết sự khác nhau giữa hằng và biến khi được triệu gọi trong và ngoài hàm. Còn hiện tại, tôi chỉ đơn thuần thông qua thắc mắc của bạn Phương để giới thiệu khái niệm Hằng.
Là một khái niệm rất lạ của PHP, tôi không biết phải định nghĩa thế nào cho chuẩn xác, nhưng qua một ví dụ đơn giản thế này, các bạn sẽ hình dung được:
<?php
$a = ‘MeoMun’;
$MeoMun = ‘Nguyen Ngoc Long’;
echo ‘$a = ‘,$a,’; $$a = ‘,$$a;
?>
Có thể hiểu rằng khi gặp $$a, PHP sẽ trả về giá trị của $a trước nhất. Khi này
$$a = ${$a} = ${MeoMun} = $MeoMun
Mà $MeoMun = ‘Nguyen Ngoc Long’ nên giá trị cuối cùng chúng ta nhận được sẽ làNguyen Ngoc Long
Mới nhìn thì bạn sẽ thấy rằng khái niệm này có vẻ hơi rắc rối và vô nghĩa, nhưng nó lại vô cùng hữu ích trong một vài trường hợp (ví dụ sau này học nâng cao, bạn có thể dùng biến-biến để phát sinh phương thức động của một đối tượng).
Bài tập 5.1 Hãy giải thích tại sao trong ví dụ tính tổng 2 số, khi hiển thị kết quả ra màn hình, dấu + sau 34 và dấu = sau 56 lại bị rơi xuống hàng dưới? Hãy sửa lại source code để kết quả in ra “đẹp hơn” như sau:
Bài 5.2 Viết chương trình thực hiện các việc sau:
- Định nghĩa một hằng tên là Pi = 3.141592654
- Cho người dùng nhập vào một số giá trị bất kì
- Hiển thị thông tin tính diện tích hình tròn có bán kính bằng với giá trị mà người dùng vừa nhập vào
Bài 5.3 Viết chương trình nhập họ tên và ngày, tháng, năm sinh của người sử dụng (4 lần nhập riêng rẽ), sau đó in ra màn hình ngày tháng năm sinh của họ dưới dạng D/M/YYYY và cho biết họ hiện được bao nhiêu tuổi. Ví dụ người dùng tên Long, ngày sinh = 4; tháng = 11; năm = 1983, viết ra “Xin chào Long, bạn sinh ngày 4/11/1983. Năm nay bạn được 27 tuổi”.
Bài 5.4 Viết chương trình tính thể tích hình lập phương với số đo một cạnh nhập từ bàn phím.
Bạn có thể tham khảo thêm tài liệu php cơ bản
Không có nhận xét nào:
Đăng nhận xét