TỔNG QUAN VỀ PHP
|
Đây là tài liệu về PHP một ngôn ngữ lập trình với những công dụng có hơi cao cấp môt tí, nhưng sự thật cũng không khó đâu các bạn. Để học được giáo trình PHP này không phải đọc một lần từ đầu đến cuối là được, các bạn không phải là thần thánh, mà nếu là thần thánh thì chẳng cần phải học.
Nếu bạn chấp nhận rằng mình có trí thông minh bằng với mọi người thì nên học như mọi người
Mỗi ngày bạn chỉ nên đọc và tìm hiểu một đoạn ngắn thôi, khi đã hiểu thì ngày hôm sau đọc tiếp một phần khác.... Cứ như vậy đến khi hết bài
Mỗi đoạn mang một chủ đề quan trọng và khác nhau, Mỗi đoạn được xem như một bài nhỏ và có tiểu tựa màu đỏ trong khung vàng, mỗi ngày bạn chỉ cần đọc và nghiên cứu một bài nhỏ như vậy thôi
Bạn cứ theo đúng phương pháp này thì việc học của bạn mới có kết quả tốt đẹp |
PHP
Để có thể tiếp tục bước
vào phần rộng lớn hợn của lập
trình thiết kế web này, mình mong chắc
bạn:
*.Bắt buộc bạn phải
có kiến thức về HTML
*.Rất nên biết một
client script như javascript
Sau đây là thông tin
để chúng ta ba hoa về PHP
PHP (viết tắt hồi quy
"PHP: Hypertext Preprocessor") là một ngôn
ngữ lập trình kịch bản hay một loại
mã lệnh chủ yếu được dùng
để phát triển các ứng dụng
viết cho máy chủ, mã nguồn mở,
dùng cho mục đích tổng quát.
Nó rất
thích hợp với web và có thể dễ
dàng nhúng vào trang HTML. Do được tối ưu hóa
cho các ứng dụng web, tốc độ nhanh,
nhỏ gọn, cú pháp giống C và Java,
dễ học và thời gian xây dựng sản
phẩm tương đối ngắn hơn so với
các ngôn ngữ khác nên PHP đã nhanh
chóng trở thành một ngôn ngữ lập trình
web phổ biến nhất thế giới.
Wikipedia
Bấy nhiêu đó là
đủ để chúng ta ba hoa rồi, tiếp theo là hiểu được
PHP làm gì.
_PHP là một sever script
giống như ASP.
_PHP miễn phí
(ASP là của Microsoft, chả mấy khi Microsoft cho
không cái gì, nếu có cho không
thì vẫn có cách lấy tiền khác).
_PHP làm việc
được với nhiều hệ CSDL
_PHP được sử dụng
rất rộng rải.
Dám nói 85% website mà các bạn đã
từng viếng thăm viết từ PHP
_Nhìn chung
thì PHP hơi dễ hơn các ngôn ngữ
cùng loại khác.
_Khác biệt giữa sever
và client script là cái client script(như
javascript chẵ hạn) là sau khi trình duyệt load
nó về (view source lên là thấy) nó
mới chạy. Còn sever script thì đã
xử lý tử trên sever òi. Trang mà
các bạn đang xem cũng được viết
với sever script. Bạn view source thì chỉ thấy
một mớ html và javascript quen thuộc. Nhưng
thật ra bản thân nó không phải như
vậy đâu! Nó viết rất
khác.
_Đây cũng là một
trong những điểm hay của sever script, bạn
nhớ cách viết chương trình lam tn1
cộng hai số của javascript không. Ta tất
nhiên là có thể tính toán với
PHP, nhưng có điều khi tính toán xong, in
ra, người dùng xem nguồn trang chỉ có
kết quả. Khỏi sợ người ta ăn
cắp trương rình của mình.
_Và đây cũng có
thể là điều mà các bạn sẽ
không quen nếu chỉ từng dùng các client
script, bạn còn nhớ cách kích hoạt
một function với event không!? Tới bây giờ
với những gì mình biết thì các
sever script chỉ dừng lại sau khi đả
"dịch" ra mọi thứ ở sever và in ra
code dựng ra thứ ta mong muốn.
_Nhưng vì các sever script
có thể dễ dàng in ra các client script
và tại đây, một lần nữa xuất
hiện sự cần thiết của con người.
_Một điều rất tuyệt
ở PHP là không như javascript, chả thể
nào có chuyện khác biệt giữa các
trình duyệt, và thậm chí cả loại
máy sever. Và cũng không có
chuyện tuỳ từng nhà sản xuất
muốn chế tạo cái hàm, đối
tượng nào thì làm, có một tổ
chức chuyên làm những chuyện ấy. Và mỗi lần có cái gì
mới thì tất cả những người
dùng nguồn (những nhà cung cấp cho chúng
ta) sẽ đồng loạt thay đổi.
_Điểm mạnh của các
sever script là làm việc với các CSDL,
và làm việc với các CSDL xứng đáng
để có một trang hướng dẫn riêng.
_Tuy không bắt
buộc và rất cần thiết nhưng kiến
thức cơ bản về lập trình sẽ rất
và cực kỳ hữu ít cho bạn. bạn sẽ dễ
dàng làm quen với cú pháp mới, khi
đả hiểu thế nào là hàm, thế
nào là biến, vòng lặp....
Cú pháp có thể thay
đổi nhưng cách hoạt động vẫn
thế.Nếu bạn quyết định đi tiếp
vào ngôn ngữ này là bạn đã
quyết định nghiên cứu một thứ
rất mới và rất mạnh mẽ,nhưng
cái gì càng mạnh mẽ, phức tạp
thì lại càng........... các
bạn hiểu ý mình rồi đó!
CHUẨN
BỊ Để làm việc với php, thật
đáng tiếc là không phải chỉ
cần tới anh bạn già NotePad mà cần
phải có cái gọi là Websever (bao gồm nhiều
thứ gộp lại), nơi mà thực hiện
việc dịch và các thứ khác. TRANG
ĐẦU TIÊN PHP tuy dễ dàng sinh ra mã HTML nhưng
cũng có thể chèn vào giữa nội dung
file HTML. CHƯƠNG
1 BIẾN
PHP Trước tiên, dành cho các bạn
mới bước chân vào lĩnh vực lập
trình: CÁC GIÁ
TRỊ CỦA BIẾN Trước tiên, mình xin trình bày
với các bạn 3 kiểu giá trị cơ
bản nhất TOÁN
TỬ Biểu thức: Toán tử trong PHP cũng giống như
trong các ngôn ngữ khác. PHP
VỚI CẤC KIỂU GIÁ TRỊ Bài này sẽ nêu ra một
số đểm linh động của php về mặt
tính toán và các giá trị. NHÁY
ĐƠN – NHÁY KÉP Mấy cái này ví dụ cái là
các bạn hiểu ngay! PHP
HẰNG Định nghĩa hằng PHP
HẰNG Định nghĩa hằng ĐỔI
KIỂU DỮ LIỆU Như chúng ta đã
biết, tất cả các biến PHP đều
có kiểu dữ liệu riêng. CÂU LỆNH IF Trong cuộc sống, có nhiều việc
ta chỉ làm khi thoả mãn một số
điều kiện cụ thể. CÂU
LỆNH if -else Câu lệnh if-else dùng cho trường
hợp chỉ có một điều kiện cần
được xem xét tới, nhưng trường
hợp có nhiều điều kiện cũng như
khả năng sảy ra thì sao!?!? Sau đây mình sẽ
giới thiệu một cách đặt biến đặc biệt : PHP VÒNG
LẬP Bạn muốn bày tỏ tình yêu
với người ấy, và muốn cho người
ấy biết bạn yêu người ấy
đến nức nào, và ý tưởng
của bạn sẽ là một trang web với
hàng ngàn dòng chữ : Vòng lặp For MẢNG TRONG PHP Nếu bạn đã từng
học qua bất cứ ngôn ngữ lập trình
nào, thì chắc hẵn sẽ không xa lạ
gì với mảng! PHP MẢNG KẾT HỌP Mảng kết hợp đơn
giản là loại mảng nhưng: MẢNG DỰNG SẲN Có khá
nhiều mảng dựng sẵn trong các ngôn
ngữ lập trình, php cũng như vậy, và
những mảng này rất hữu ít trong khi
làm việc. TỰ THIẾT LẬP HÀM Vừa qua, ở bài nói về mảng
chúng ta thấy có sự xuất hiện của
một hàm có tên là count(hàm
này trả về độ dài của mảng
đó). HÀM
VÀ THAM SỐ Vấn đề để nãy sinh ra
mấy cái tham số này là, có uổn
quá không khi mỗi lần ghi là có 1000
câu giống nhau, 1000 lần thì nhiều thiệt,
nhưng mà lại không có tác dụng
đả kích mục tiêu, phải là BIẾN
TOÀN CỤC VÀ BIẾN CỤC BỘ Khái niệm
biến toàn cục và biến cục bộ
chắc các bạn cũng đã từng nghe qua,
trong rất nhiều ngôn ngữ khác nhau. trong
PHP cũng không loại trừ. PHP
FUNCTION RETURN lại bàn tới hàm count
ở bài trước ta nhận thấy thêm
một điều rằng hàm count trả về
một giá trị số có thể đem ra
tính toán luôn. GIAO TIẾP VỚI
NGƯỜI DÙNG GIAO TIẾP VỚI
NGƯỜI DÙNG QUA PHƯƠNG THỨC GET Giao tiếp ở đây
đơn giản là nhận thông tin từ
người dùng và xử lý chúng. GIAO TIẾP VỚI NGƯỜI DÙNG QUA
PHƯƠNG THỨC POST Bài trước đã
hướng dẫn bạn cách giao tiếp với
người dùng qua phương thức GET, bài
này chúng ta làm quen với 1 phương
thức phồ biến hơn POST
Đầu tiên tìm
một cái host hỗ trợ php..Nếu
có điều kiện thì mua luôn một
cái host(cái host nho nhỏ
khoảng vài trăm nghìn một năm). Không có điều kiện thì
tìm cho mình một cái host free.
Một số địa chỉ web
free host:
byethost.com
summerhost.info
000webhost.com..........................
các bạn có thể tìm thêm
với google.
_Một số lời khuyên
của mình là nên tìm những phần
mềm chuyên nghiệp để thiết kế
luôn như Dreamweaver(cái này
hay lắm). Chứ anh bạn già NotePad
củng phải nghĩ hưu chứ. cái
này ra tịm đĩa mua, 7000 một bộ
đủ các phần mềm.
_Nếu dư tiền
thì đầu tư cho mình một cái USB,
cài đặt những gì cần kiếp,
đừng tiếc tiền, chừng nào xài
tiền phung phí, cho gái, đánh bạc
thì đáng trách, chứ đầu tư cho
kiến thức thì không sao
_À thêm một lời
khuyên nữa là đừng dùng trình
duyệt IE, chuyễn qua xài FF đi.
Mã nguồn:[Chọn]
<html>
<head>
<title>Ví dụ php</title>
</head>
<body>
<?php
echo'Đây là text được sinh ra bởiPHP';
?>
</body>
</html>
Để đánh dấu nội dung PHP, ta đặt
code PHP trong cặp<? và ?>bạn copy đoạn
mã trên, save lại với tên php code.php
chẵn hạn, lưu ý là.php, đặt nó
vào trong thư mục gốc của host ,websever
và mở trình duyệt chạy thử nhé.
File php có nhiều phần mở rộng khác nhau
như là .php3, .php4, nhưng cứ .php thôi cho
nó khoẻ .
Một trang sẽ được hiện ra.
hãy thử xem source nguồn của
nó, bạn sẽ không thể tìm thấy
các cặp<?và?>cũng như từ echo,
chỉ những HTML và text bình thường.
Biến là đại
lượng được đặt tên, dùng
để lưu giữ gái trị và gái
trị có thể thay đổi trong quá trình
thực hiện chương trình.
SAK 11
Quả thật khái niệm
được coi là cơ bản này khá
là mơ hồ cho những người mới bắt
đầu như chúng ta,nhưng
các bạn sẽ từ từ hiểu rỏ mọi
vấn đề khi tiếp tục đi sâu vào!
Một ví dụ đời
thường:
Bạn có một bao thuốc
lá, bạn lấy cây viết đặt tên
nó là a, bạn nhét 10,000 VND vào bao
thuốc lá, thì lúc này bao thuốc
là có giá trị là 10,000 VND (tất
nhiên là không tính tiền cái bao hihihi
) rồi một hồi sau, bạn lấy 10,000 ra, bỏ
vào tờ 5,000 thì nó có giá trị
5,000....hay là x,y,z trong một bài toán, ta cho
x=5, y=6, z=x+y thì Z=11
Còn trong lập trình php
Để đánh dấu
đây là một biến, ta dùng ký
tự $ và một số ký tự tiếp theo,
các ký tự kiếp theo cần tuân thủ
một số nguyên tắc như sau:
Quy tắc đặt tên
biến
Có 3 quy tắc:
* Ký tự bắt đầu
phải là một chữ cái, còn các
ký tự tiếp theo có thể là chữ
số, gạch dưới, chữ cái. Ngoài
mấy thứ kể trên ra, bạn không nên
thêm bết cứ thứ gì khác vào
tên biến!
* Không được có
khoản trắng
* Các biến phân biệt
chữ hoa chữ thừơng, vì thế ANH sẽ
khác với Anh cũng như anh, để tránh
rắc rối, ta nên dùng chữ thường cho
tất cả tên biến và dùng dấu _
để phân cách thay cho khoảng trắng
Một số ví dụ:
Các tên biến không
hợp lệ:
$11a2 $lop 11
Các tên biến hợp
lệ:
$lop11A2 $lop_a2
Boolean
Boolean là gái trị logic
có hai giá trị là TRUE hoặc FALSE.(TRUSE có nghĩa là đúng,
FALSE là sai)
Số
là loại giá trị
dùng đễ tính toàn đó,
đừng nói bạn không biết số là
gì nha!Số thì có số động, số
nguyên......
Chuỗi
Chuỗi là các kí
tự bảng chữ cái + kí tự đặc
biệt + số, nói chung là
bất kì cái gì mà ta viết ra trên
bàng phím được, thì là chuỗi!
Câu lệnh gán:
Lệnh gán là 1 trong
những lệnh cơ bản nhất của ngôn
ngữ lập trình, trong javascript có dạng:
<tên biến>=<biểu
thức>;
Nếu gán biến với
giá trị chuỗi:
<tên
biến>="<biểu thức>";
cần có thêm cặp
dấu nháy.
VD:
ta gán biến a và b với
các giá trị như sau:
$a=1;
$b="1";
$a sẽ mang gái trị số
1, còn $b mang giá trị chuỗi "một"
==> đặt bên trong cặp dấu nháy là
chuỗi!
Gán biến với giá
trị Boolean
VD:
$a=TRUE;
Gán như thế này
có nghĩa là $a mang giá trị ĐÚNG.
Chú ý là nếu
bạn gán $a như thế này:
$a="TRUE";
Có nghĩa là bạn
đơn thuần gán cho nó một chuỗi
gồm các chữ cái TRUE.
Trong lập trình đều có một số quy
tắc chung, ví dụ như việc ưu tiên
tính toán với các phép toán
+,-,*,/.
hay là ưu tiên với biểu
thức trong dấu (). Mọi quy tắc số học
về mặt này đều đúng trong php
1.Toán tử số học
(+[cộng], -[trừ],*[nhân], /[chia] , %[chia lấy
dư],++[tự tăng 1], --[tự giàm 1])
+ : Phép cộng.(khỏi giả thích)
- : Phép trừ.(khỏi giả thích)
* : Phép nhân.(khỏi giả thích)
/: Phép chia.(khỏi giả thích)
% : Phép chia lấy phần dư.
VD: 5/3 được 1 dư 2 thì 5%3=2,
++: Phép tăng một đơn vị.
VD:
1++ = 2;
5++ = 6
--: Phép giảm một đơn vị.
VD:1--= 0;
9 -- = 82.
Toán tử so sánh
== : So sánh bằng.
> : So sánh lớn hơn.
< : Nhỏ hơn.
>= : So sánh lớn hơn hoặc
bằng.
<= : Nhỏ hơn hoặc bằng.
!= : So sánh khác
Chú ý: chỉ có <= (bé hơn hoặc
bằng) chứ không có =<(bằng hoặc
bé hơn, cũng như thế đối với
>=, không có chuyện =>)
3.Toán tử logic && (and):
Giá trị đúng khi cả hai cùng
đúng.
VD:nếu(anh yêu em)và(em yêu
anh)thì cưới ngay.
ta chỉ cưới ngay khi hai
điều kiện trong ngoặc cùng đúng.
|| (or) : Giá trị đúng
nếu một trong 2 đều đúng.
VD:nếu(em đau khổ)hoặc(anh
đau khổ) thì chia tay!
Chỉ cần một trong hai điều kiện
đúng là chia tay
Đối với chuỗi
Toán tử.
tượng trưng cho việc nối
hai chuỗi lại.
VD:
$a="I am ";
$b="Nguyen";
$c=$a.$b;
thì c có giá trị là chuỗi "I am
Nguyen".
Toán tử được
sữ dụng khai báo trên tầm vực script
sẽ có tầm vực trên toàn script .
Biến khai báo trong hàm ( function ) sẽ có tác dụng
trên tầm vực của hàm đó .
1.Các phép toán học
========================
Toán tử| Tên| Ví
dụ
-----------------------------------------
+cộng $a+$b;
-trừ $a-$b;
*Nhân $a*$b;
/chia $a/$b;
%Modulo $a%$b;
=======================
2.Các phép toán nối
chuỗi
Các phép toán nối
chuỗi là dấu "."
Ví dụ :
<?
$a="http://www.";
$b="library";
$b=$b."php.net";
$a=$a.$b;
echo$a;// bạn test xem
?>
3.Các phép toán trả
về từ gán
Sữ dụng phép toán
trả về phép toán học khác .
<?
$a="http://www.";
$b="libraryphp";
$a=$a.$b;
echo$a.($c=".net");// bạn test
xem
?>
4.Các phép gán kết
hợp
Trong PHP các bạn có
thể sữ dụng các phép toán gán
kết hợp,sẽ giảm bớt thời gian khai
báo.
Sau đây là bảng
thống kê phép toán gán kết hợp (
có 2 cách sữ dụng )
========================
Toán tử| sữ dụng|
Tương ứng
========================
+=$a+=$b $a=$a+$b;
++$a++$a=$+1;
-=$a-=$b $a=$a-$b;
--$a--$a=$a-1;
/=$a/=$b $a=$a/$b;
*=$a*=$b $a=$a*$b;
%=$a%=$b $a=$a%$b;
.=$a.=$b $a=$a.$b;
========================
Bên trên là một
số toán tử mà mình sưu tầm
được, hi vọng nó sẻ giúp ít
phần nào cho các bạn!
Các bạn nên đọc
bài này để tránh thắc mắc về
sau gặp phải bời những điểm khá linh
động đó!
VD: Ta có đoạn code
Mã nguồn:[Chọn]
<?
php
$a=2;
$b="2 chuỗi";
$c=$a+$b;
echo$c;
?>
Nếu bạn chạy thử
và kết quả in ra màn hình sẽ là
4. Sỡ dĩ có điều này là do nếu
một chuỗi bắt đầu bằng một số
nguyên hay số động PHP có thể xử
lý nó như kiểu số.
Còn một trường hợp
như thế này:
Mã nguồn:[Chọn]
<?php
$a=2;
$b=2.345;
$c=$a+$b;
echo$c;
?>
$a là số nguyên, $b là
số động và $c=$a+$b sẽ là một
số động 4.345
Với PHP làm việc với
kiểu giá trị của biến thôi không
cũng là một nghệ thuật. Mình
sẽ có những loạt bài dành riêng
cho mấy chuyện này.
Dấu nháy
và biến
Mình có hai đoạn code
php, cả hai đều giống nhau, chỉ khác nhau
ở cặp dấu nháy dòng thứ 3.
Mã nguồn:[Chọn]
<?php
$dot=".net";
$domain="wapcry$dot";
echo$domain;
?>
Đoạn code php trên sẽ in
ra kết quả là:wapcry.net, nhưng với
đoạn code này:
Mã nguồn:[Chọn]
<?php
$dot=".net";
$domain='wapcry$dot';
echo$domain;
?>
Kết quả sẽ
là:wapcry$dot.
Bạn có thể bao lấy
chuỗi bằng cặp dấu nháy đôi,
biến trong chuỗi sẽ được mỡ rộng,
còn khi bạn bao chuỗi bằng cặp dấu
nháy kép, biến trong chuỗi sẽ không
được mỡ rộng!
Mình thường
dùng kèm phép nối chuỗi vào, làm
thế sẽ không bị nhầm lẫn.
VD:
Mã nguồn:[Chọn]
<?php
$dot=".net";
$domain='wapcry'.$dot;
echo$domain;
?>
Mỗi khi in ra hay gắn cái
gì có chứa chuỗi và biến, mình
đều bao đoạn chuỗi thứ nhất với
một cặp dấu nháy, sau đó thực
hiện phép nối chuỗi đó với
biến bằng mộ dấu chấm, và cứ
thế.
Thay thế các cặp dấu
nháy cho nhau
Nếu bạn muốn in ra một
chuỗi chứ ký tự(")thay
vì đặt thêm trước nó một
dấu \ ta có thể đơn giản thay cặp
dấu nháy bao ngoài chuổi bằng cặp
dấu nháy đơn.
VD:
Mã nguồn:[Chọn]
<?php
echo'Dấu nháy kép" ';
?>
Hằng số là đại lượng có
giá trị không đổi, theo
nghĩa toán học. Còn trong lập
trình thì cũng hơi tương tự như
thế.
Hằng được đặt ra để lưu
giữ một giá trị (tương tự như
biến) nhưng chỉ khác một điều duy
nhất là sau khi khai báo giá trị
, ta không thể thay đổi giá trị
của nó nữa!
Hàm define() được sử dụng để
tạo một hằng số:
Hàm này có cấu trúc sau:
define ("tên_hằng","giá trị của
hằng");
Ví dụ:
define ("COMPANY","NS Co.Ltd");// Định
nghĩa hằng COMPANY với giá trị là "NS
Co Ltd"define ("diem_so",4.5);
// định nghĩa hằng diem_so với giá trị
là 4.5 (hic... thi lại );
Sau khi một hằng số được tạo ra,ta
có thể sử dụng chúng thay cho giá
trị của chúng:
echo ("Tên công ty: ".COMPANY);
Điều này tương đương với echo
("Tên công ty: NS Co Ltd");
Một số hằng xây dựng sẵn(built in constant)
PHP có chứa một số hằng được
xây dựng sẵn.
TRUE và FALSE là 2 hằng đã được
dựng sẵn với chỉ định true (1) và
false (=0 hoặc một xâu rỗng)
Hằng số PHP_VERSION chỉ định phiên bản
của bộ phân tích PHP mà bạn đang
dùng hiện tại.
HằngPHP_OS chỉ định hệ
điều hành server mà trình phân
tích PHP đang chạy.
echo (PHP_OS);
// in ra màn hình"Linux" (ví
dụ)_FILE_and_LINE_ trả về tên của đoạn
script (đoạn mã nhúng) đang được
phân tích tại dòng hiện thời trong
đoạn mã script.
PHP còn cung cấp một số hằng
để thông báo lỗi như E_ERROR, E_WARNING,
E_PARSE và E_NOTICE.
Ngoài ra, PHP còn cung cấp một
số biến cung cấp thông tin về môi
trường PHP đang sử dụng.
Để xem các thông tin này,bạn
có thể dùng hàm phpinfo() như sau:
<HTML>
<!-- phpinfo.php-->
<BODY>
<?php
phpinfo();
?>
</BODY>
</HTML>
Hằng số là đại lượng có
giá trị không đổi, theo
nghĩa toán học. Còn trong lập
trình thì cũng hơi tương tự như
thế.
Hằng được đặt ra để lưu
giữ một giá trị (tương tự như
biến) nhưng chỉ khác một điều duy
nhất là sau khi khai báo giá trị
, ta không thể thay đổi giá trị
của nó nữa!
Hàm define() được sử dụng để
tạo một hằng số:
Hàm này có cấu trúc sau:
define ("tên_hằng","giá trị của
hằng");
Ví dụ:
define ("COMPANY","NS Co.Ltd");// Định
nghĩa hằng COMPANY với giá trị là "NS
Co Ltd"define ("diem_so",4.5);
// định nghĩa hằng diem_so với giá trị
là 4.5 (hic... thi lại );
Sau khi một hằng số được tạo ra,ta
có thể sử dụng chúng thay cho giá
trị của chúng:
echo ("Tên công ty: ".COMPANY);
Điều này tương đương với echo
("Tên công ty: NS Co Ltd");
Một số hằng xây dựng sẵn(built in constant)
PHP có chứa một số hằng được
xây dựng sẵn.
TRUE và FALSE là 2 hằng đã được
dựng sẵn với chỉ định true (1) và
false (=0 hoặc một xâu rỗng)
Hằng số PHP_VERSION chỉ định phiên bản
của bộ phân tích PHP mà bạn đang
dùng hiện tại.
HằngPHP_OS chỉ định hệ
điều hành server mà trình phân
tích PHP đang chạy.
echo (PHP_OS);
// in ra màn hình"Linux" (ví
dụ)_FILE_and_LINE_ trả về tên của đoạn
script (đoạn mã nhúng) đang được
phân tích tại dòng hiện thời trong
đoạn mã script.
PHP còn cung cấp một số hằng để
thông báo lỗi như E_ERROR, E_WARNING, E_PARSE và
E_NOTICE.
Ngoài ra, PHP còn cung cấp một
số biến cung cấp thông tin về môi
trường PHP đang sử dụng.
Để xem các thông tin này,bạn
có thể dùng hàm phpinfo() như sau:
<HTML>
<!-- phpinfo.php-->
<BODY>
<?php
phpinfo();
?>
</BODY>
</HTML>
Kiểu dữ liệu của biến sẽ
được tự động xác định
bởi giá trị đặt vào biến
$a=1 // $a là kiểu integer
$a=1.2 // Bây giờ, nó là kiểu double
$a="1" // Và bây giờ nó là
kiểu stringa)
Chuyển kiểu chuỗi và lừa kiểu dữ
liệu
Nếu bạn làm các thao tác tính
toán số trên một chuỗi, PHP sẽ tính
toán chuỗi như là một số.
Điều này được biết
đến với cái tên gọi là
"chuyển kiểu chuối (String conversion), mặc dù
giá trị chuỗi của nó có thể
không cần phải thay đổi.
Trong đoạn ví dụ sau, biến $str
được xác định là một
chuỗi:
$str="756300 không có";
Nếu chúng ta cố cộng thêm một giá
trị nguyên là 3 vào biến $str, biến $str
sẽ tự động tính với số nguyên
756300:
$x=4+$str;//$x =756304
Nhưng bản thân giá trị của biến $str
không thay đổi
echo ($str); // In ra màn hình chuỗi "756300
không có"
Chuyển kiểu chuỗi phải tuân theo 2 nguyên
tắc sau:
- Chỉ những chuỗi bắt đầ là một
xâu các chữ số. Nếu
chuỗi bắt đầu bằng một giá trị
số hợp lệ, chuỗi này sẽ
được xác định như giá trị
của nó, trong trường hợp khác, nó
sẽ trả về 0.
VD: chuỗi"35 tuổi" sẽ được
ước lượng là 35, nhưng chuỗi
"tuổi 35" sẽ chỉ xác định
giá trị 0.
- Một chuỗi sẽ chỉ được xác
định như là một giá trị kiểu
double nếu giá trị kiểu double được
miêu tả bao gồm toàn bộ chuỗi. Chuỗi
"3.4", "-4.2" sẽ được ước
lượng như giá trị thực 3.4 và
-4.2.Nếu một ký tự không phải là
ký tự kiểu số thực được
đưa vào chuỗi, giá trị của
chuỗi đó sẽ được ước
lượng như là một số nguyên. Chuỗi "3.4 dollar" sẽ thành số
nguyên 3.
Trong việc cộng với chuỗi
chuyển kiểu, PHP sẽ thực hiện "lừa
kiểu" giữa 2 kiểu số. Nếu bạn
thực hiện một phép toán số học
giữa kiểu thực và kiểu nguyên, giá
trị sẽ là số thực
$a=1 //$ a là một số nguyên
$b= 1.0 //$b là số thực
$c=$a+$b //$c là kiểu số thực ,
= 2.0$d = $c+"6th" //$d là kiểu số thực= 8.0
Ép kiểu dữ liệu
Ép kiểu dữ liệu cho phép bạn thay
đổi kiểu dữ liệu của biến
$a=11.2// $a là kiểu thực
$a=(int)$a// Bây giờ, $ a là kiểu nguyên,
giá trị = 11$a= (double)$a// Bây giờ $a lại
trở về kiểu thực
= 11.0$b= (string)$a// $b là giá trị kiểu chuỗi
="11"Ngoài ra, chúng ta còn được
phép ép kiểu (array) và (object)(integer)
tương đương với (int); (fload) và (real)
tương đương với (double)
Một số hàm tiện ích khác
PHP có một số hàm hỗ trợ làm
việc với các biến- Hàm gettype($ten_bien)
xác định kiểu của biến. Nó sẽ
trả về một trong các giá trị:
"integer","double", "string",
"array","object", "class", "unknown
type"
(Chúng ta sẽ tìm hiểu kỹ hơn vể
mảng (array) và kiểu đối tượng
(object) ở các bài sau.
Ví dụ:
echo(gettype($name));
- Hàm settype($ten_bien,"kieu_du_lieu") sẽ
đặt kiểu dữ liệu cho biến $ten_bien.
Kiểu dữ liệu được viết dưới
dạng một chuỗi, và có thể có
một trong các kiểu sau:
"integer", "double", "string","array",
"object".
Nếu kiểu dữ liệu không
được đặt, giá trị false sẽ
được trả về, còn nếu thành
công, nó sẽ trả về giá trị true.
VD:
$a=7.5; //$a là kiểu thựcsettype($a,"integer");
// bây giờ nó là một số nguyên
có giá trị 7- Hàm isset($ten_bien)
được sử dụng để xác
định xem biến $ten_bien đã đặt
một giá trị nào đó hay chưa.
Nếu biến đó đã có giá
trị,hàm trả về true.Trong
truờng hợp ngược lại, hàm trả
về giá trị false;
- Hàm unset($ten_bien) được sử dụng
để huỷ bỏ biến $ten_bien, giải phóng
bộ nhớ chiếm dụng của biến
đó.
Ví dụ:
Một ông bố hứa với
con trai:
_Nếu con đỗ đại
học thì bố sẽ thưởng cho con một
chiếc xe.
Chừng nào mà điều
kiện con đỗ đại học thì ông bố
mới lo tới chuyện thưởng cho con một
chiếc xe.
Tới một ngày kia, ông bố lại nói với
cậu con trai.
_Nếu con đỗ đại
học thì bố sẽ thưởng cho con một
chiếc xe, nếu không thì
đi nghĩa vụ quân sự.
Ở câu nói
thứ nhất của ông bố, không nói
rõ thi rớt thì có chuyện gì, còn
ở câu thứ ai có nói rõ.
Trong lập trình tuy hình
thức từng ngôn ngữ hơi khác nhau nhưng
cũng có hai dạng cơ bản của câu
điều kiện, ta chỉ bàn tới câu
lệnh này trong phạm vi PHP
if-then
if(<điều kiện>)
{
câu lệnh 1;
câu lệnh 2;
................
}
Nếu chỉ có một
câu lệnh sau vế điều kiện thì ta
không cần cặp dấu ngoặc {}, nhưng luôn
có có hiện diện của cặp dấu {}
là một thói quan tốt, giúp tránh
nhầm lẫn!
if-then-else
if(<điều kiện>)
{
//các câu lệnh sẽ
thực hiện nếu điều kiện thoả mản
câu lệnh 1;
câu lệnh 2;
................
}else{
//các câu lệnh thực
hiện khi điều kiện không thoả mản
câu lệnh 1;
câu lệnh 2;
................
}
Cách xác định
đúng hay sai
Ví dụ ta có đoạn
script:
$a=3;
$b=5;
if($a<$b)
{
echo"Đúng";
}else{
echo"Sai";
}
Trường hợp này
thì kết quả sẽ là Đúng
Nhưng hãy xét thêm
trường hợp:
$a=3;
$b=5;
if($a<$b==false)
{
alert("Đúng");
}else{
alert("Sai");
}
Thì kết quả sẽ
là một hộp thông báo với nội dung
là Sai??????
Vì:bản
thân biểu thứ ca<b với a=3 và b=5 mang
giá trị đúng(true) mà đúng(true)==sai(flase)
thì tất nhiên là sai.
Sữ dụng toán tử or (||)
,and(&&)
Xét đoạn code, nếu
với một số a có chia hết cho cả 6
và 4 không, nếu có thì kết quả
sẽ là có, ngược lại thì
không.
<?php
$a=12;
if(($a%4==0)&&($a%6==0))
{
echo"Có";
}else{
echo"không"
}
?>
Kết quả dĩ nhiên sẽ
là có
Chú ý:Tự bản
thân toán tử<=hay>=đã chứa một
toán tử hoặc.
Xét ví dụ:
Nếu điểm Trung Bình năm của con từ 9
trở lên thì quà của con sẽ là
một chiếc Novol, từ 7 tới dưới 9 là
một chiếc Martin, còn mà dưới 7 là
có chuyện đó!.
Câu nói đó trong PHP sẽ là:(giả
sử điểm là 8 đi ha)
<?php
$diem=8;
if($diem>=9)
{
echo"Được một chiếc Novol";
}
elseif($diem>=7)
{
echo"Được một chiếc Martin";
}else{
echo"Tiêu rồi";
}
?>Theo như giả sử thì Được một
chiếc Martin rồi ha!Chú ý, việc dùng
elseif hoàn toàn khác với dùng nhiêu
câu lệnh if như trong ví dụ sau đây:
<?php
diem=10;
if($diem>=9)
{
echo"Được một chiếc Novol";
}
if($diem>=7)
{
echo"Được một chiếc Martin";
}else{
echo"Tiêu rồi";
}
?>
Lần này chúng ta tự tin hơn, cứ mạnh
dạng cho diem=10 . Cùng với sự tự tin
đó, kết quả sẽ là:
Được một chiếc Novol và cả
Được một chiếc Martin.
Sướng nhĩ, nhưng thế
là do lỗi lập trình, một ngày nào
đó khi bạn trở thành một lão
làng lập trình, bạn tự viết cho mình
một website buôn bán, và lầm lẫn như
thế này sẽ làm bạn.......
Thật ra nếu muốn viết đoạn trên
bằng cách dùng nhiều câ lệnh if
nhưng theo đúng cách ta nghĩ thì phải:
<?
$diem=10;
if($diem>=9)
{
echo"Được một chiếc Novol";
}
if(($diem>=7)&&($diem<9))
{
echo"Được một chiếc Martin";
}
if($diem<7)
{
echo"Tiêu rồi";
}
?>
Nhưng quả thật sẽ rất khó khăn
nếu có nhiều mức thưởng nhỉ!
Các bạn xem VD sau
<?
$math=10+10;
if($math==20)$rs= "Đúng";
else
$rs= "Sai";
?>
Bây giờ tớ thay
đoạn mã trên bằng đọan dưới
đây, các bạn xem sự khác biệt
nhé
<?
$math=10+10;
$rs=$math==20?"Đúng":"Sai" ;
?>
Chúng ta thấy lệnh
điều kiện if và else được thay
thế bằng ? và:
Như vậy sẽ rất tiện
cho chúng ta khi lập trình và nhìn cũng
thẩm mỹ hơn.
I LOVE YOU
Có hai cách để làm chuyện này:
_Đầu tiên bạn hãy viết ra một
câu:I LOVE YOU, sau đó copy & past bằng tổ
hợp phím Ctrl + V cho nó lẹ, được
cở 5,6 dòng, tô đen hết
lại past tiếp, được cỡ một ganf,
tô den rồi past cho nó nhiều, chả mấy
chốc cũng sẽ được một ngàn
dòng.
_Cách thứ hai là làm mọi thứ với
khoảng 5 dòng với javascript, quăng luôn
đoạn code để mọi người xem rồi ta
cùng đi vào tìm hiểu sau:
Vòng lặp While
<?php
while($i<1001)
{
echo"<b>I LOVE YOU</b><br />";
$i=$i+1;
}
?>
Ta hãy bắt đầu với dòng while($i<1000),
chữ while trong tiếng Anh có nghĩa là trong khi,
còn trong trường hợp này có nghĩa
là: khi điều kiện còn đúng
thì làm đi, làm lại cái trong cặp
dấu ngoặc móc, với câu lệnh trên
của chúng ta thì điều kiện là
$i<1001.
Dòng
echo "<b>I LOVE YOU</b><br />";
in ra sòng mã HTML mà ta cần.
Còn dòng
$i=$i+1;
cũng không kém gì quan trọng, nếu
tiếu dòng này, biến $i sẽ lưu giữ
mãi một giá trị và sẽ chẳn bao
giờ lớn hơn 1001, vòng lặp sẽ chạy
mại không dừng! trong mọi
trường hợp, điều này không hề
có lợi cho bất cứ ai, nhà sản xuất
hay người sử dụng!
Cú pháp của vòng lặp While:
while(<điều kiện>)
{
câu lệnh 1;
câu lệnh 2;
.................
}
Vòng lặp Do...... While
VÒng lặp Do....While
gần giống như vòng lặp While, chỉ có
điều là các câu lệnh sẽ
được là mít nhất một lần
rồi mới bắt đầu kiểm tra điều
kiện ở các lần sau.
Cú pháp:
do
{
câu lệnh 1;
câu lệnh 2;
.................
}
while(<điều kiện>);
Bạn
hãy xem ví dụ với cùng chức năng in
ra 1000 cấu I LOVE YOU như đoạn code trên
nhưng với vòng lặp for:
for($i=0;
$i<1001;
$i++)
{
echo"<b>I LOVE YOU</b><br
/>";
}
or(phần khởi tạo;
phần điều kiện;
tăng hay giảm giá trị)
Phần khởi tạo: bạn
khái báo biến đếm và gán
giá trị ban đầu cho nó luôn.
Phần điều kiện: bạn
đặt ra điều kiện.Phần tăng/giảm
gái trị: đây là điềm khác
biệt nhất với vòng lặp while, trong khi
vòng lặp while thì cần một câu lệnh
để tăng/giảm giá trị cho biến
đếm, thì bản chất vòng lặp for
đã có sẵn điều này.
Mình trong ví dụ trên,
điều kiện mình đã đạt theo
kiểu toán tự rút gọn ( ++ có nghĩa
là tự tăng lên 1, bạn nên xem lại
bài toán tử)
Chú ý: mọi con
đường đều về La Mã, ở các
ví dụ trên mình chỉ cho tăng biến
đếm lên, trong khi vẫn có thể làm
như thế với các giảm biến đếm
xuống, chỉ cần linh hoạt một chút:
<?php
for($i=1001;
$i>1;
$i--)
{
echo"<b>I LOVE YOU</b><br
/>";
}
?>
hãy linh hoạt và vận
dụng thích hợp cho mục đích của
bạn, đó là việc mà chỉ con
người mới làm được!
Còn nếu bạn là
người mới vào nghề như mình,
thì đây là một khái niệm mới,
cũng khá khó đấy!
Mảng gồm có
hai loại, mảng một chiều và mảng
nhiều chiều, trong mãng nhiều chiều thông
dụng nhất ta dùng tới mảng hai chiều,
vì thế ta chỉ nói về mảng một
chiều và mảng hai chiều.
Mảng một
chiều là dãy hữu hạn các phần
tử cùng kiểu. Mảng được đặt tên và
mỗi phần tử có một chỉ số.
Đề mô tả mảng
một chiều cần xác định kiểu của
phần tử và cách đánh số các
phần tử của nó.Nhớ lại ví dụ
về biến mà mình môtả với bao
thuốc lá ở những bài nói về
biến, bây ta ví dụ trường hợp ta
có 10 bao thuốc là và bạn quyết
định đặt tên cho chúng là bao1,bao2,....,bao8,bao9,bao10, với mục
đích là mỗi bao chứa một cái
gì đó, tới khi nào cần cái
gì thì lấy ra mà dùng.
Còn mảng, mảng chính
là cả cây thuốc lá!, đơn giản
chỉ là một cây thuốc là, bên trong
có những bao thuốc lá!giải thích cho
dài dòng, mảng 1 chiều đơn thuần
là một tập hợp các biến, và
các biến có thứ tự thay vì tên!tạo
một mảng:
Ví dụ tạo một
mảng đơn giản
<?php
$mang=array("a","b","c");
echo$mang[0]
?>
Thử in ra phần tử thứ
nhất của mảng(kết quả sẽ là
a)Đây cũng là một các để khia
báo mảng, các phần tử của mảng
được đặt trong dấu nháy kép
và chúng được ngăn cách nhau
giữa dấu (,)
Còn đây là cách
thứ hai, khá dễ nhìn!
Bạn hãy khai báo mảng,
không cần khai báo nội dung bên trong:
$mang=array();
sau đó, khai báo từng
phần tử bằng cách này:
$mang[0]="a";
$mang[1]="b";
$mang[2]="c";
$mang[3]="d";
Bạn chú ý là trong
PHP phần tử đầu tiên của mảng
có thứ tự là 0.
____________
Duyệt qua mảng với vòng
lặp.
Với một mảng
như thế này, ý tưởng là chạy
một vòng lặp từ đầu mảng tới
cuối mảng lấy ra giá trị.
Để tìm được
độ dài của mảng php cung cấp cho
cúng ta một hàm, đó là hàm count,
php cung cấp rất nhiều các hàm để
làm việc với mảng, cụ thể ta sẽ
nói tới sau,bây giờ chỉ
quan tâm với cái hàm count
Hàm count() nhận vào
một tham số chính là mảng. Ví dụ
tương ứng với mảng $mang trên ta có:
<?php
$mang=array();
$mang[0]="a";
$mang[1]="b";
$mang[2]="c";
$mang[3]="d";
echocount($mang);
?>
kết quả in ra sẽ là 4
đi tiếp vào cái vòng lặp, ở
đây mình dùng vòng lặp for
<?php
$mang=array();
$mang[0]="a";
$mang[1]="b";
$mang[2]="c";
$mang[3]="d";
for($i=0;$i<count($mang);
$i++)
{
echo$mang[$i]."<br />";
}
?>
Chúng ta đi xem ví dụ:
<?php
$mang=array("a","b","c");
echo$mang[0]
?>
Đây là mảng cơ
bản của chúng ta,và khi lấy giá
trị của một phần tử trong mảng ra, ta tham
chiếu tới nó với khoá là giá
trị thứ tự của nó.
Điểm khác
biệt của mảng kết hợp là cái
khoá.
Ta có thể khai báo như
sau:
<?php
$mang=array("name"=>"Nguyên","website"=>"wapcry.net");
echo$mang["name"]
?>
kết quả sẽ là
:Nguyên ta cũng có thể khai báo với
cách khác như sau:
$mang=array();
$mang["name"]="Nguyên";
$mang["website"]="wapcry.net";
Cách duyệt qua mạng
này cũng hơi khác với mảng một
chiều. Để duyệt mảng ta kết hợp
vòng lặp while và lis()=each()
Ví dụ để lấy
cả khoá lẫn giá trị ta làm như sau:
<?php
$mang=array("name"=>"Nguyên","website"=>"wapcry.net");
while(list($key,$value)=each($mang))
{
echo"<b>Khoá</b>:
".$key." <b>giá trị</b>: ".$value."<br />";
}
?>
Còn ví dụ chỉ
muốn lấy ra giá trị thì chỉ khác
ở mỗi dòng vòng lặp
while:while(list(,$value)=each($mang))
bỏ đi biến $key, nhưng
vẫn để trước biến $value dấu ( , )
Giải thích nguyên lý
làm việc như sau:
Mỗi lần vòng lặp
chạy each()sẽ lấy ra lần lượt một
cặp khoá và giá trị tương ứng.
2 giá trị đó sẽ
được gán lần lượt cho biến
ở vị trí thứ nhất và thứ hai
đạt trong list()
Vòng lặp dừng lại khi
duyệt qua hết mảng.
Ở đây mình chạy
đoạn mã để truyxau6t1 các kháo
và gái trị của mảng $_SERVER một
mảng khá hữu ích:
<?php
$mang=$_SERVER;
while(list($key,$value)=each($mang))
{
echo"<b>Khoá</b>:
".$key." <b>giá trị</b>: ".$value."<br />";
}
?>
Đoạn mã này nằm
trong filen1.php đặt trong thư
mục new, host hệ điều hành Window, thư
mục root nằm ở
C:/Program Files/VertrigoServ/www.
Kết quả là đây:
Mã nguồn:[Chọn]
Khoá: HTTP_HOST giá trị:
127.0.0.1:8080
Khoá: HTTP_USER_AGENT giá
trị: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.1)
Gecko/20090715 Firefox/3.5.1
Khoá: HTTP_ACCEPT giá trị:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Khoá: HTTP_ACCEPT_LANGUAGE giá
trị: en-us,en;q=0.5
Khoá: HTTP_ACCEPT_ENCODING giá
trị: gzip,deflate
Khoá: HTTP_ACCEPT_CHARSET giá
trị: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Khoá: HTTP_KEEP_ALIVE giá
trị: 300
Khoá: HTTP_CONNECTION giá
trị: keep-alive
Khoá: HTTP_COOKIE giá trị:
_csuid=49cdeeba4344116b; SMFCookie956=a%3A4%3A%7Bi%3A0%3Bs%3A1%3A%221
%22%3Bi%3A1%3Bs%3A40%3A%228f96f02f0ffe510b7f35f7a8a78faf0b39a2b5e5
%22%3Bi%3A2%3Bi%3A1435289626%3Bi%3A3%3Bi%3A0%3B%7D;
username=Nguy%EAn;SMFCookie891=a%3A4%3A%7Bi%3A0%3Bs%3A1%3A%223
%22%3Bi%3A1%3Bs%3A40%3A%220a8eaaa533fa14a9e62e4df7da7094e41769f28c
%22%3Bi%3A2%3Bi%3A1437102838%3Bi%3A3%3Bi%3A0%3B%7D
Khoá: HTTP_CACHE_CONTROL giá
trị: max-age=0
Khoá: PATH giá trị:
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
Khoá: SystemRoot giá trị:
C:\WINDOWS
Khoá: COMSPEC giá trị:
C:\WINDOWS\system32\cmd.exe
Khoá: PATHEXT giá
trị:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
Khoá: WINDIR giá trị:
C:\WINDOWS
Khoá: SERVER_SIGNATURE giá
trị: Apache/2.0.63 (Win32) PHP/5.2.6 Server at 127.0.0.1Port 8080
Khoá: SERVER_SOFTWARE giá
trị: Apache/2.0.63 (Win32) PHP/5.2.6
Khoá: SERVER_NAME giá trị:
127.0.0.1
Khoá: SERVER_ADDR giá trị:
127.0.0.1
Khoá: SERVER_PORT giá trị:
8080
Khoá: REMOTE_ADDR giá trị:
127.0.0.1
Khoá: DOCUMENT_ROOT giá trị:
C:/Program Files/VertrigoServ/www
Khoá: SERVER_ADMIN giá trị:
root@localhost
Khoá: SCRIPT_FILENAME giá
trị: C:/Program Files/VertrigoServ/www/new/n1.php
Khoá: REMOTE_PORT giá trị:
3450
Khoá: GATEWAY_INTERFACE giá
trị:CGI/1.1
Khoá: SERVER_PROTOCOL giá
trị: HTTP/1.1
Khoá: REQUEST_METHOD giá
trị: GET
Khoá: QUERY_STRING giá trị:
Khoá: REQUEST_URI giá trị:
/new/n1.php
Khoá: SCRIPT_NAME giá trị:
/new/n1.php
Khoá: PHP_SELF giá trị:
/new/n1.php
Khoá: REQUEST_TIME giá trị:
1248597994
Khoá: argv giá trị: Array
Khoá: argc giá trị: 0
____________
Cái này ví dụ,
để tham chiếu tới PHP_SELF thì ta làm theo
cách của mãng kết hợp bình
thường $_SERVER['PHP_SELF']
Một số phần tử mà
mình thấy rất quan trọng:
PHP_SELF: trả về
đường dẫn tới file đang chạy,
tính từ thư mục gốc
REQUEST_URI: tương tự như
cái PHP_SELF, nhưng nếu đường dẫn
có chứa tham số ( ?aaa=xxx...) thì nó
trả về luôn mấy cái tham số
đó.
SCRIPT_FILENAME: trả về
đường dẫn đầy đủ
DOCUMENT_ROOT: trả về đường
dẫn tới thư mục www càu
host
***
Chú ý: đường
dẫn ở đây không phải là
đường dẫn với dạng tên miền nha
mà là đường dẫn kiểu như
các thư mục trong máy.
Trong PHP có rất nhiều những hàm dựng
sẵn như thế, giúp ta giải quyết
được nhiều tình huống trong lập
trình web dễ dàng hơn.bên cạnh những
hàm có sẵn đó, ta cũng có thể
tự soạn thảo các hàm cho riêng
mình.
Mục đích của việc tự soạn thảo
các hàm là cho đỡ mõi tay, dễ hiệu chỉnh.
Các bạn hãy tưỡng
tượng ta có một hành động A,
hành động A là tập hợp bao gồm
rất nhiều hành động khác.
Và trên cả trang web, ta biết
rằng sẽ có nhiều hơn 3 lần ta thực
hiện lại hành động A đó, vệc
đưa hành động đó trỡ thành
một hàm sẽ là một bước đi
khôn ngoan và rất "lập trình
viên".
________________________
Xét ví dụ bạn đơn giãn muốn in
ra một nghìn câu:
Anh yêu em.
Mọi chuyện sẽ đơn giản hoá với
vòng lặp (các bạn vẫn còn nhớ
chứ).
for($i=0;$i<1001;$i++)
{
echo"<b>Anh yêu em</b><br />";
}
Nhưng mà sẽ khá dài cho trường
hợp: 100 cấu Anh yêu em., tiếp theo lại là
1000 câu Em có yêu anh không!?, lại 1000
câu.......
Để khai báo hàm - function trong php ta có
cú pháp như sau:
Mã nguồn:[Chọn]
function <tên hàm>()
{
//Nội dung các câu lệnh sẽ nàm trong hai
dấu ngoặc nhọn này
}
Với ví dụ trên, mình sẽ viết
một hàm có công dụng in ra 1000 câu Anh
yêu em.như sau:
functionsayiloveyou()
{
for($i=0;$i<1001;$i++)
{
echo"<b>Anh yêu em</b><br />";
}
}
Mình đã đặt tên cho hàm này
là hàm sayiloveyou và bất cứ khi nào,
ở bất cứ đâu trên trang web, mình
muốn in ra 1000 câu Anh yêu em.mình chỉ
việc gọi hàm này (gọi nói nghe cho
nó giống lập trình viên, chứ có
nghĩa là viết nó ra thôi!)
<?php
functionsayiloveyou()
{
for($i=0;$i<1001;$i++)
{
echo"<b>Anh yêu em</b><br />";
}
}
sayiloveyou();
echo"Đẵ in ra 100 câu đầu tiên,
không biết em có hiểu rõ tình cảm
của anh chư, in tiếp<br />";
sayiloveyou();
?>
Hàmsayiloveyou()của chúng ta vừa mới
viết, lại không giống như cái hàm
count()đã nêu ra từ đầu bài ở
chỗ hàm count nhận vào một tham số
bên trong cặp dấu ngoặc, những bài
tiếp theo của chúng ta sẽ nói về
mấy cái mà mình gọi là "tham
số" này.
À xin nói thêm, nếu có ai định
dùng tin học để chinh phục nữa kia, thì các trên của mình
còn dỡ lắm, mình nghĩ cách tốt
nhất là học viết phần mềm, hay virus
gì đó, chứ web thì hiệu quả
không bàng.
1000 câu Anh yêu em.
rồi 1000 câu Em là mặt
trời của anh.
rồi 1000 câu Anh phải đeo
kính râm khi em hé môi cười.
thì may ra nàng còn say sẫm
mặt mài.
Ta nhận thấy ngây bất cập, hàm
được đặt ra để rút ngắn
công việc, nhưng nếu cứ mỗi câu
như thế mà viết một hàm thì
nó chỉ làm mọi chuyện rắc rối
thêm.
Và ý tưởng dẫn tới....
xem ví dụ:
functionsayiloveyou()
{
for($i=0;$i<1001;$i++)
{
echo"<b>Anh yêu em</b><br />";
}
}
Đó là đoạn code củ, sửa nó
lại một chút, các bạn chú ý
tới những điểm khác biệt nhé:
functionsayiloveyou($loinoi)
{
for($i=0;$i<1001;$i++)
{
echo$loinoi;
}
}
Mình đã thêm vào ở giữa 2 dấu
ngoặc () một biến $loinoi, và ở dòng echo
thay vì nội dung là câu nói thì
nội dung ở đấy lại là biến $loinoi.
Để gọi hàm lúc này và in ra 1000
câu Anh yêu em.ta gọi như sau:
<?php
functionsayiloveyou($loinoi)
{
for($i=0;$i<1001;$i++)
{
echo$loinoi;
}
}
sayiloveyou("Anh yêu em.<br />");
?>
giải thích cho việc này chính là khi
gọi hàm
sayiloveyou("Anh yêu em.<br />")
thì phần nội dung"Anh yêu em.<br
/>"được gán cho biến $loinoi khá
là đơn giản [phải không mọi
người.Ta cũng có thể viết một
hàm với nhiều tham số nhận vào, ví
dụ như ngoài việc tuỳ biến sẽ in ra
cái chi, ta có thể tuỳ biếm thêm số
lầm in ra.
functionsayiloveyou($loinoi,$solan)
{
for($i=0;$i<$solan;$i++)
{
echo$loinoi;
}
}
Khi gọi hàm này, ta lần lượt cho
vào hai giá trị tương ứng theo
đúng thứ tự:
sayiloveyou("Anh yêu em.<br />",999);
Cho tới lúc này thì để chinh phục
cô ấy với cấu trúc hàm, mọi
việc chỉ còn tuỳ thuộc vào ý
tưởng của bạn nữa thôi nói
đùa thế cho vui, chứ thật ra có một
câu nói như thế này: Rào cản
hiện thời không phải là công nghệ
mà là ý tưởng.
Những kiến thức trên rất
là cơ bản, nhưng lại nắm giữ
những sức mạnh rất lớn.
Khác biệt
lớn nhất của biến toàn cục và
biến cục bộ có thể thấy ngay ở
các ví dụ về fuction. ta xét
đoạn mã:bạn hãy chạy thử
đoạn mã, chỉ có1 từ "Chữ
viết" được in ra.
<?php
functionvietchu()
{
$chu="Chữ viết";
echo$chu;
}
vietchu();
echo$chu;
?>
Hàm vietchu() thực hiện 2
động tác: 1 gán chuỗi"Chữ
viết"cho biến $chu, 2 in ra biến $chu
Vậy tại sao khi với
dòng lệnh tiếp theo (echo$chu; ) lại không
hề cho ra bất cứ kết quả nào?
Câu trả lời mà cho
tới lúc này chắc các bạn ai cũng
đoán được:
$chu chỉ là biến cục
bộ, chỉ có hiệu lực bên trong hàm.
Việc người ta chế ra 2
loại biến này cũng có lý do, ví
dụ như khỏi lo bị trùng các biến
nếu trong cùng một file mà có nhiều
hàm. Nhắm cái nào cần giữ giá trị
lại thì giữ, đỡ tốn cấu
hình.ở đây, nếu bạn muốn xác
định biến nào sẽ là biến toàn
cục thì hãy khai báo các biến
đó sau từ khoá global
functionvietchu()
{
global$chu;
$chu="Chữ viết";
echo$chu;
}
và thêm một lưu
ý, biến đã được gán giá
trị bên ngoài, đưa vào trong hàm
cũng không có giá trị (nói chung
nếu mà không khai báo biến toàn
cục thì "nội bất xuất, ngoại
bất nhập".
Ví dụ:
<?php
$viet="Việt nam";
functionvietchu()
{
$chu="Chữ viết ".$viet;
echo$chu;
}
vietchu();
?>
hàm này chỉ in ra hàm
chử viết, để có thể in ra nguyên
câu :
Chữ viết Việt Nam
như ta mong muốn thì
hãy khai báo biến toàn cục cho
$viet="Việt nam";
functionvietchu()
{
global$viet;
$chu="Chữ viết ".$viet;
echo$chu;
}
Đây chỉ là một
ví dụ đơn giản, trong thực tế,
vấn đề này được dùng tới
rất nhiều, trong thời gian và va chạm, bạn
sẽ thấy cái gì càng cơ bản lại
càng quan trọng.
for($i=0;$i<count($mang);$i++)
{
echo$mang[$i]."<br />";
}
Hàm count không như các hàm mà ta
đã tự viết từ trước đến
giờ,nó chả đưa ra màn hình
cái gì cả,mà trả về cho bản
thân nó một giá trị. (Ở
đây nếu bạn nào đã học qua
pascal chắc chắn sẽ hiểu rất rỏ sự
khác biệt giữa hàm và thủ tục).Ta
cũng có thể làm được điều
đó.Ví dụ, mình sẽ viết một
hàm tính tổng hai số. hàm
này nhận vào 2 tham số, tính tổng
của chúng và trả về giá trị cho
chính nó.
functiontonghaiso($a,$b)
{
$c=$a+$b;
return$c;
}
Dòng :return$c; là dòng quan trọng nhất
bài này mà mình muốn nói tới,
từ khoá return sẽ gán một giá trị
nào đó cho hàm.
Hãy xét ví dụ tính toán này,
các bạn sẽ hiểu rõ hơn!
<?php
functiontonghaiso($a,$b)
{
$c=$a+$b;
return$c;
}
echotonghaiso(3,5);
echo"<br />";
echotonghaiso(3,tonghaiso(3,5));
?>
Kết quả sẽ là:
8
17
11
Nhận thông tin từ
người dùng có2 cách chính:
1 Tạo những cái ô
có thể điền thông tin vào, nút
nhấn để gửi.
2 (nghe hơi lạ
nhưng cũng là 1 cách) Bạn có 1 danh
sách, người dùng muốn xem cụ thể
cái gì thì click vào. Hành động click vào
thể hiện lựa chọn của người
dùng, cũng là một hình thức lựa
chọn dữ liệu từ người dùng. Bài viết sẽ đề cập tới
phương thức này.
Xử lý ở đây
có rất nhiều ví dụ:
1 Bạn vào một diễn
đàn - đăng nhập - lúc này mật
khẩu bạn nhập (dữ liệu đầu vào)
vào sẽ được so sánh với mật
của bạn lúc đăng ký xem có
trùng không - không trùng thì báo sai
mật khẩu- đây cũng là 1 khâu xử
lý.
2 Bạn vào
một blog, forum gửi bài, nội dung bài
viết, tiêu đề (dữ liệu đầu
vào), bài viết được lưu ở
đâu đó - đây cũng gọi là
xử lý.
3 Cụ thể hơn, bạn
viết 1 chương trình cho người dùng
nhập vào 2 con số, tính tổng 2 số.
Code hoàn thiện ở cuối
bài, tiếp theo đây là phần
hướng dẫn.Tạo một biến $users là
một mảng, chứa vài mảng nhỏ khác:Để
hiểu thêm về mảng ở đây, mời
các bạn đọc lại bài php mảng
kết hợp.
Mã nguồn:[Chọn]
$users =array(
array('name' => 'Tuấn', 'gender'=>
'Nam', 'city' => 'Hồ Chí Minh'),
array('name' => 'Dung', 'gender'=>
'Nữ', 'city' => 'Hà Nội'),
array('name' => 'Trang', 'gender'=>
'Nữ', 'city' => 'Huế'),);
Ví dụ, ta muốn tìm ra
thành phố của bạn tên "Dung" (Dung
ở vị trí thứ 2 trong mãng $users nên
có số thứ tự là 1)thì ta dùng code
sau:
Mã nguồn:[Chọn]
echo $user[1]['city'];
Tiếp đến, để
lựa chọn thông tin của ai sẽ được
hiễn thị thì việc ta cần làm là
giúp người dùng lựa chọn và
nhận kết quả lựa chọn từ người
dùng.
Để bắt đầu,
bạn hãy tạo 1 file tên là php-get.php với
nội dung như sau:
Mã nguồn:[Chọn]
<?php
echo$_GET['id'];
?>
Save file này lại và
duyệt nó trên trình duyệt, ví dụ :
localhost/php-get.php?id=1
chú ý phần sau
dấu"?"Bạn sẽ thấy nội dung trang
là số 1, tương tự, hay thay đôi
giá trị sau dấu "=".
Giá trị sau dấu "="
sẽ là giá trị cuả biến mãng $_GET['id'].
$_GET đơn thuần chỉ
là một mảng kết hợp, và các
khóa là các tham số được gửi
trên đường dẫn (trong truờng hợp
này là ID).
Bạn có thể gửi
kèm nhiều tham số cùng một lúc,
ví dụ: hãy tạo một file mới với
nội dung như sau:
Mã nguồn:[Chọn]
<?php
echo$_GET['id']
echo$_GET['name'];
?>
Save file này lại và
duyệt nó trên trình duyệt, ví dụ :
localhost/php-get.php?id=1&]name=Trang/b]
Lúc này nội dung hiện
ra sẽ là 1 Trang. Ta dùng dấu "&"
ghép các tham số lại với nhau để
truyền đi.
Hiện giờ
các bạn đã nắm bắt được
vấn đề.
Để người dùng có thể chọn
tên của bạn muốn hiễn thị thông tin
cụ thể, ta in ra sẵn một danh sách
với link có các tham số id=0, 1, 2...
Ta dùng Vòng lặp
để in ra danh sách:
Mã nguồn:[Chọn]
for($i=0;$i<count($users);$i++)
{
echo '<li><a
href="php-get.php?id='.$i.'">'.$users[$i]['name'].'</a></li>';
}
Để in ra giá trị
của khóa city cho một bạn, ta dùng 1 code:
Mã nguồn:[Chọn]
echo $users[ $_GET['id'] ]['city'];
Ví dụ, khi ?id=1 thì
đạon code trên sẽ được hiễu
đơn giản là:
Mã nguồn:[Chọn]
echo $users[1]['city'];
Ta cần lưu ý một
vấn đề:
Chuyện gì sẽ sảy ra
nếu một người dùng vì lí do
nào đó (tò mò - phá phác..)
sửa lại đường dẫn như thế
này :
localhost/php-get.php?id=5 hoặc
localhost/php-get.php?id=abc
Rõ ràng trong mảng $users
của chúng ta chỉ có 3 phần tử, thay
khóa bằng 5 hay abc đơn giản chẳng cho ta
một kết quả gì.
Điều này không hề
dơn giản và trong một vài trường
hợp rất ư là nguy hiểm.
Ta hãy lấy một ví
dụ chương trình tính giá trị a*b (a x b) với a, b được nhập
từ người dùng qua phuơng thức GET.
Mã nguồn:[Chọn]
<?php
echo$_GET['a']*$_GET['b'];
?>
Để chạy chương
trình tính toán, ta duyệt : localhost//php-get.php?a=3&b=5
Kết quả nhận
được sẽ là 15. Bỏ
bớt tham số b ra (localhost//php-get.php?a=3) kết quả
bằng 0. Điều gì nguy
hiểm trong trường hợp này? Bạn
hãy tưởng tựợng a là số
lượng mặt hàng, b là đơn giá
và đây là trang dùng để bạn
tính tiền. Thật không hay để một ai
đó mua hàng trăm món đồ với
giá 0 đồng.Để tránh việc này
sảy ra, ta luôn phải kiểm tra dữ liệu
từ người dùng! Và quả thật
kiểm tra dữ liệu từ người dùng
là công việc quan trọng bật nhất trong thiết
kế web(cũng như bất kỳ
phần mềm nào khác).
Ở đây mình chỉ xin
trình bày cách kiểm tra xem a và b
đã có giá trị hay chưa, chứ
chưa tính tới việc có đúng
kiểu giá trịnh hay chưa (trường hợp a,b được thay thế bằng chữ
cái thì sao?)
Ta dùng hàm isset()
đề kiểm tra.isset() - đọc là "is
set" (tiếng anh ấy) - trà về đúng khi
một biến đã được khai báo,
ngược lại sai. và code kiểm tra của
chúng ta như sau:
Mã nguồn:[Chọn]
Mã nguồn:[Chọn]
<?php
if(isset($_GET['a']) &&
isset($_GET['b']))
{
echo$_GET['a']*$_GET['b'];
}else{
echo'thieu du lieu dau vao';
}
?>
Lúc này nếu thử
bỏ tham số hay hoặc b ra khỏi đường
dẫn thì ta sẽ nhận được cảnh
báo 'thieu du lieu dau vao' thay vì số 0.
Đây chỉ
là một ví dụ để các bạn
thấy được nguy cơ (thật ra khi làm
trang bán hàng mà tính toán như thế
thì dỡ lắm) và thực chất nguy
cơ này rất lớn. Cụ thể nguy hiểm như thế
nào chúng ta sẽ cùng tiềm hiểu ở
cuối loạt bài về php và mysql.
Còn về phần kiểm tra dự liệu
người dùng nhập vào,chúng ta sẽ
tiếp tục ngay sau bài nói về phương
thức POST (GET và POST là hai anh em, hiểu GET rồi
thì POST cũng dễ nuốt hơn phần nào)
Sau đây là full code,
mời các bạn xem và ngâm cứu.
Mã nguồn:[Chọn]
<!DOCTYPE html>
<html id="demo-get"
lang="en">
<head>
<meta charset=utf-8 />
<meta name="viewport"
content="width=620" />
<title>Ví dụ phương
thức GET trong PHP</title>
<head>
<body>
<table>
<tr>
<td>
<ul>
<?php
$users= array(
array('name'=>'Tuấn','gender'=>'Nam','city'=>'Hồ
Chí Minh'),
array('name'=>'Dung','gender'=>'Nữ','city'=>'Hà
Nội'),
array('name'=>'Trang','gender'=>'Nữ','city'=>'Huế'),);
for($i=0;$i<count($users);$i++)
{
echo'<li><a
href="php-get.php?id='.$i.'">'.$users[$i]['name'].'</a></li>';
}
?>
</ul>
</td>
<td>
<?php
if(isset($_GET['id']) &&
isset($users[$_GET['id']]))
{
echo"Tên:".$users[$_GET['id']]['name']."<br
/>Giới tính:".$users[$_GET['id']]['gender']."<br
/>Thành phố:".$users[$_GET['id']]['city'];
}
?>
</td>
</tr>
</table>
</body>
</html>
Để dùng được
POST bạn phải kết hợp với html form.
Nếu như với phương
thức GET chúng ta truyền 1 tham số bằng
cách ghi kèm tham số đó vào
đường dẫn, thì với POST, chúng ta
chỉ duy có 1 cách cơ bản nhấp là
tạo một vài trường để người
dùng điền thông tin vào và sau
đó bấm gửi.
người dùng đang
nhập vào bằng id và pass, nếu cả 2
trùng khớp sẽ hiện ra câu "xin chào
<tên đầy đủ>";Đây là
danh sách id,pass,fullname dùng trong ví dụ
Trích dẫn
nam, 123456, Hồ Thành Nam dung,
654321, Hà Nhuận Dung trang, abcdef, Đinh Hoàng Trang
Code hoàn thiện ở cuối
bài, sau đây là phần hướng dẫn
Đầu tiên, tạo 1
cái tạo một file tênphp-post.php, nội dung file
như sau:
Mã nguồn:[Chọn]
<!DOCTYPE html>
<html id="demo-get"
lang="en">
<head>
<meta charset=utf-8 />
<meta id="viewport"
content="width=620" />
<title>Ví dụ phương
thức POST trong PHP </title>
<head>
<body>
<form action="php-post.php"
method="get">
ID:<input type="text"
name="id" /><br />
PASS:<input type="password"
name="pass" /><br />
<input type="submit"
name="submit" value="Gửi" /><br />
</form>
</body>
</html>
Điền nội dung bất
kỳ vào 2 trường ID và pass, nhấn
nút Gửi, bạn sẽ thấy 1 chuỗi các
tham số xuất hiện (...php-post.php?id=.....&pass=.....&submit=Gửi)
Form trên (với thuộc
tính method="get") đã khởi tạo cho
chúng ta một chuỗi các tham số GET với
khóa là giá trị của thuộc tính
name[/name] của các trường input (chúng ta
có thể lấy được những gì
người dùng điền vào hai ô ID
và PASS qua$_GET['id'] và $_GET['pass'])
Bây giờ hãy thừ
đổi method="get"trong form thành
method="post", bây giờ bạn hãy
điền bất kỳ thông tin gìvào
và nhấn nút gửi. Ta chú ý không
hề có sự thay đồi của đường
dẫn! Đó là cái hay của phương
thức POST.
Lúc này đề sử
dụng nội dung của người dùng đã
điền vào 2 truờng ID và PASS, ta đơn
giản truy xuất 2 biến mảng$_POST['id'] và
$_POST['pass']. (phương thức GET
thì ta có mãng $_GET, phương thức POST ta
có mảng $_POST)
Rất đơn giàn
để sữ dụng POST khi ta đã hiểu
về GET
Phần giải thích về
phuơng thức POST đã xong.
Giờ xin trình bày
chút về thuật giải của chuơng trình
đăng nhập :
Dòng 15 - 19 : khởi tạo 1
mảng lớn, chứ 3 mảng nhỏ, mỗi mảng
nhỏ là 1 mảng kết hợp gồm 3 khóa:
id, pass, fullname
Dòng 21 : kiểm tra xem nút
gửi có được nhấn chưa
Dòng 22 : khởi tạo biến
$login mặt định = false, nếu sau khi kết
thúc vòng lặp for mà nó vẫn giữ
nguyên giá trị false có nghĩa là sai
mật khẩu.
Dòng 23 - 29 : Chạy 1 vòng
lặp từ đầu tới cuối mảng $users, so
sánh giá trị của 2 trường id, paa
của mỗi mảng nhỏ với giá trị
của$_POST['id'] và $_POST['pass'] cứ thế lần
luợt, nếu gặp 1 trường hợp mà
cà 2 phép so sánh đều đúng, thay
đổi giá trị của biến $Login lại
thành trueFull :
Mã nguồn:[Chọn]
<!DOCTYPE html>
<html id="demo-get"
lang="en">
<head>
<meta charset=utf-8 />
<meta id="viewport" content="width=620"
/>
<title>Ví dụ phương
thức POST trong PHP </title>
<head>
<body>
<form action="php-post.php"
method="post">
ID:<input type="text"
name="id" /><br />
PASS:<input type="password"
name="pass" /><br />
<input type="submit"
name="submit" value="Gửi" /><br />
</form>
<?php
$users= array(
array('id'=>'nam','pass'=>'123456','fullname'=>'Hồ
Thành Nam'),
array('id'=>'dung','pass'=>'654321','fullname'=>'Hà
Nhuận Dung'),
array('id'=>'trang','pass'=>'abcdef','fullname'=>'Đinh
Hoàng Trang'),);
if(isset($_POST['submit']))
{
$login=false;
for($i=0;$i<count($users);$i++)
{
if($users[$i]['id']
==$_POST['id']&&$users[$i]['pass'] ==$_POST['pass'])
{
$login=true;$name=$users[$i]['fullname'];break;
}
}
if($login)
{
echo'Xin chào '.$name;
}else{
echo'Sai ID hoặc Pass!!!';
}
}
?>
</body>
</html>
Khi sử dụng các tài liệu trong trang wap này, xin vui lòng ghi rõ:
"từ http://vg34.wapath.com"
để người xem biết và có thể trở lại wapsite nguồn gốc tham khảo ý kiến khi cần thiết.
When using the document in this wap page, please specify:
"from http://vg34.wapath.com"
so that viewers know and be able to return wapsite sources consulted when necessary