II.1.2.4. Kiểu string
String trong PHP là một chuỗi các ký tự 1 byte. PHP không hỗ
trợ Unicode, để làm việc với Unicode bạn phải sử dụng UTF8
với các hàm utf8_encode() – utf8_decode()
String của PHP hỗ trợ chiều dài rất lớn (?)
Trong PHP, string được xác định theo 3 cách
– Dấu nháy đơn (single quote)
– Dấu nháy kép (double quote)
– Heredoc
Truyền biến trong string
– Truyền kiểu đơn giản
– Truyền kiểu phức
Truy cập đến từng ký tự trong string
Các toán tử trên string
66 trang |
Chia sẻ: thanhle95 | Lượt xem: 631 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Bài giảng PHP - Chương 2: PHP Căn bản - Nguyễn Phú Quảng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
II. PHP Căn bản
II.1. Biến, kiểu và hằng
II.2. Toán tử và biểu thức
II.3. Các câu lệnh điều khiển
II.4. Hàm
II.5. Lớp & đối tượng
II.6. Tham chiếu (reference)
II.1. Biến, kiểu và hằng
II.1.1. Biến
II.1.1.1. Tên biến
II.1.1.2. Tham chiếu
II.1.1.3. Biến động
II.1.1.4. Phạm vi (scope) của biến
II.1.2. Kiểu
II.1.3. Hằng
II.1.1.1. Tên biến
<?php
$var = "Bob";
$Var = "Joe";
echo "$var, $Var"; // outputs "Bob, Joe"
$4site = 'not yet'; // invalid; starts with a number
$_4site = 'not yet'; // valid; starts with an underscore
$täyte = 'mansikka'; // valid; 'ä' is (Extended) ASCII
228.
?>
Biến được ký hiệu bởi ký tự $
Tên biến phải được bắt đầu bởi 1 chữ cái hoặc ký tự gạch
chân
Tên biến không chứa các dấu và ký tự cách
II.1.1.2. Tham chiếu
Giống ngôn ngữ C, trong PHP bạn có thể sử dụng tham chiếu
<?php
$quang = "adfsdfasdfa";
echo("$quang");
$q = &$quang;
$q = "quangnp";
echo("$quang");
?>
<?php
$foo = 25;
$bar = &$foo; // This is a valid assignment.
$bar = &(24 * 7);// Invalid references an unnamed
expression.
function test() {
return 25;
}
$bar = &test(); // Invalid.
?>
II.1.1.3. Biến động (Dynamic Variable)
Vì PHP là ngôn ngữ thông dịch nên bạn có thể sử dụng các
biến có tên chưa biết trước (tên biến thay đổi)
<?php
$a = "quang"; // gia tri cua bien a la 'quang'
$$a = "np"; // bien dong $quang co gia tri la
'np'
echo("$a"); // In ra gia tri cua bien a
echo("$quang"); // In ra gia tri cua bien quang
${"quang"} = 13432; // Gian truc tiep bien dong
echo("$quang");
$c = "quang";
${$c} = 1000;
// Mot cach khac de truy cap den bien dong quang
echo("${$c}");
?>
II.1.1.4. Phạm vi của biến
<?php
$a = 1;
include "b.inc";
?>
Phạm vi của biến [a] có tác dụng trong cả b.inc
<?php
$a = 1; // global scope
function Test() {
echo $a; // reference to local scope variable
}
Test();
?>
Biến [a] ở ngoài và trong hàm Test khác nhau
II.1.1.4. Phạm vi của biến (2)
Từ khóa global
<?php
$a = 1;
$b = 2;
function Sum() {
//a, b trong & ngoai ham Sum
global $a, $b;
// la giong nhau
$b = $a + $b;
}
Sum();
echo $b;
?>
Hoặc sử dụng cú pháp
<?php
$a = 1;
$b = 2;
function Sum() {
$GLOBALS["b"] =
$GLOBALS["a"] +
$GLOBALS["b"];
}
Sum();
echo $b;
?>
II.1.1.4. Phạm vi của biến (3)
<?php
function Test ()
{
$a = 0;
echo $a;
$a++;
}
Test();
Test();
?>
<?php
function Test ()
{
static $a = 0;
echo $a;
$a++;
}
Test();
Test();
?>
II.1.1.4. Phạm vi của biến (4)
<?php
$foo = 25;
$bar = &$foo; // This is a valid assignment.
function test()
{
global $foo;
return $foo;
}
$bar = &test(); // Invalid.
echo($bar);
?>
II.1.2. Kiểu
Các kiểu đơn
II.1.2.1. boolean
II.1.2.2. integer
II.1.2.3. float
II.1.2.4. string
Các kiểu phức
II.1.2.5. array
II.1.2.6. object
Các kiểu đặc biệt
II.1.2.7. resource
II.1.2.8. NULL
II.1.2. Kiểu (2)
<?php
$bool = TRUE; // a boolean
$str = "foo"; // a string
$int = 12; // an integer
echo gettype($bool); // prints out "boolean"
echo gettype($str); // prints out "string“
// If this is an integer, increment it by four
if (is_int($int)) {
$int += 4;
}
// If $bool is a string, print it out
// (does not print out anything)
if (is_string($bool)) {
echo "String: $bool";
}
?>
Bạn có thể ép kiểu bằng hàm settype()
II.1.2.1. Kiểu boolean
<?php
// == is an operator which test
// equality and returns a boolean
$q = (1==1);
echo("$q");
$q = (1=="1");
echo("$q");
// this is not necessary...
if ($show_separators == TRUE) {
echo "\n";
}
// ...because you can simply type
if ($show_separators) {
echo "\n";
}
?>
II.1.2.2. Kiểu integer
<?php
$a = 1234; # decimal number
$a = -123; # a negative number
$a = 0123; # octal number (equivalent to 83 decimal)
$a = 0x1A; # hexadecimal number (equivalent to 26
decimal)
?>
<?php
$a=10000000;
var_dump($a); echo("");
$a=100000000;
var_dump($a); echo("");
$a=1000000000;
var_dump($a); echo("");
$a=10000000000;
var_dump($a); echo("");
?>
II.1.2.3. Kiểu float
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
<?php
$foo = 1 + "10.5"; // $foo is float (11.5)
$foo = 1 + "-1.3e3"; // $foo is float (-
1299)
$foo = 1 + "bob-1.3e3"; // $foo is integer (1)
$foo = 1 + "bob3"; // $foo is integer (1)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1; // $foo is float (11)
$foo = "10.0 pigs " + 1.0; // $foo is float (11)
?>
II.1.2.4. Kiểu string
String trong PHP là một chuỗi các ký tự 1 byte. PHP không hỗ
trợ Unicode, để làm việc với Unicode bạn phải sử dụng UTF8
với các hàm utf8_encode() – utf8_decode()
String của PHP hỗ trợ chiều dài rất lớn (?)
Trong PHP, string được xác định theo 3 cách
– Dấu nháy đơn (single quote)
– Dấu nháy kép (double quote)
– Heredoc
Truyền biến trong string
– Truyền kiểu đơn giản
– Truyền kiểu phức
Truy cập đến từng ký tự trong string
Các toán tử trên string
II.1.2.4. Kiểu String (2)
Kiểu dấu nháy đơn
<?php
echo 'this is a simple string';
echo 'You can also have embedded newlines in
strings this way as it is
okay to do';
// Outputs: Arnold once said: "I'll be back"
echo 'Arnold once said: "I\'ll be back"';
// Outputs: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';
// Outputs: You deleted C:\*.*?
echo 'You deleted C:\*.*?';
// Outputs: This will not expand: \n a newline
echo 'This will not expand: \n a newline';
// Outputs: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>
II.1.2.4. Kiểu String (3)
Kiểu dấu nháy kép: kiểu này giống với kiểu
dấu nháy đơn nhưng có nhiều hỗ trợ cho các
ký tự đặc biệt hơn
II.1.2.4. Kiểu String (4)
Kiểu Heredoc
<?php
$str = <<<EOA
Example of string
spanning multiple lines
using heredoc syntax.
EOA;
echo($str);
$name = "quang";
$d = date("d/m/y");
$str = <<<EOQ
This is a lecture of $name.
Ngay $d
EOQ;
echo($str);
?>
II.1.2.4. Kiểu String (5)
Truyền biến kiểu đơn giản
<?php
$beer = 'Heineken';
echo "$beer's taste is great";
// works, "'" is an invalid character for varnames
echo "He drank some $beers";
// won't work, 's' is a valid character for varnames
echo "He drank some ${beer}s"; // works
echo "He drank some {$beer}s"; // works
?>
Truyền biến kiều phức (truyền biến kiểu mảng vào
string) – sẽ đề cập đến ở phần mảng
II.1.2.4. Kiểu String (6)
Truy cập đến từng ký tự của String
<?php
$str = "This is a test";
echo $str[0]; // Ky tu dau tien
echo $str{1}; // Ky tu thu 2
echo $str{strlen($str)-1}; // Ky tu cuoi cung
echo "$str";
$str{strlen($str)-1} = "s"; // Sua ky tu cuoi cung
echo "$str";
?>
Các toán tử trên string
<?php
$str1 = "quang";
$str2 = "np";
echo $str1 . $str2, "";
echo $str1 + $str2, "";
?>
II.1.2.5. Kiểu Array
Kiểu Array của PHP thực sự là kiểu ánh xạ
(map) có thứ tự. Tức là kiểu dữ liệu gồm các
cặp khóa (key) và giá trị (value).
Với kiểu mảng này, bạn có thể sử dụng như
một mảng thuần túy (vector), hay dùng cho
các kiểu dữ liệu collection, stack, queue,
tree...
II.1.2.5. Kiểu Array (2)
Khai báo
<?php
$ar = array(3,4,5,6,3,2);
echo var_dump($ar), "";
$ar = array(5=>10, 20, 30, "q"=>40);
echo var_dump($ar), "";
$ar = array(5=>10, 6=>20, 7=>30, "q"=>40);
echo var_dump($ar), "";
$ar = array("a"=>10, 20, 30, 40);
echo var_dump($ar), "";
$ar = array("a"=>array(1,2,3,4,5), 20, 30, 40);
echo var_dump($ar);
?>
II.1.2.5. Kiểu Array (3)
Sử dụng array
<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // This is the same as $arr[13] = 56;
// at this point of the script
$arr["x"] = 42; // This adds a new element to
// the array with key "x"
unset($arr[5]); // This removes the element from the
array
unset($arr); // This deletes the whole array
?>
<?php
$handle = opendir(".");
var_dump($handle);
while($file=readdir($handle)) {
$files[] = $file;
}
var_dump($files);
?>
II.1.2.6. Kiểu Object
<?php
class Xeco {
var $sobanh;
function BaoNhieuBanh() {
echo($this->sobanh);
}
};
$xe = new Xeco();
$xe->sobanh = 4;
$xe->BaoNhieuBanh();
?>
II.1.3. Hằng
Định nghĩa hằng bằng cách sử dụng hàm define()
Phạm vi của hằng là toàn cục (global)
Chỉ có các dạng dữ liệu đơn giản (boolean, interger, float, string)
Nếu tên hằng chưa được định nghĩa, PHP giả thiết rằng bạn đang sử
dụng 1 hằng chứa giá trị là 1 string (chính là tên của hằng đó)
Để xác định một hằng đã được định nghĩa hay chưa, bạn có thể sử
dụng hàm defined
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // outputs "Constant" and issues a
notice.
echo defined("Constant");
echo defined("CONSTANT");
?>
II.1.3. Hằng (2)
Các hằng được định nghĩa trước (các hằng này
thường được sử dụng để phục vụ quá trình debug
Tên hằng Mô tả
__LINE__ Thứ tự dòng hiện tại trong file
__FILE__ Đường dẫn đầy đủ của file hiện tại
__FUNCTION__ Tên hàm hiện tại
__CLASS__ Tên lớp hiện tại
__METHOD__ Tên phương thức hiện tại của lớp
II.2. Toán tử và biểu thức
II.2.1. Mức độ ưu tiên các toán tử
II.2.2. Toán tử số học
II.2.3. Toán tử gán
II.2.4. Các toán tử trên bit
II.2.5. Toán tử so sánh
II.2.6. Toán tử điều khiển lỗi
II.2.7. Toán tử thực thi
II.2.8. Toán tử tăng, giảm
II.2.9. Các toán tử logic
II.2.10. Toán tử trên string
II.2.11. Toán tử trên mảng
II.2.1. Mức độ ưu tiên các toán tử
Associativity Operators
left ,
left or
left xor
left and
right print
right = += -= *= /= .= %= &= |= ^= >=
left ? :
left ||
left &&
left |
left ^
left &
non-associative == != === !==
non-associative >=
left >
left + - .
left * / %
right ! ~ ++ -- (int) (float) (string) (array) (object) @
right [
non-associative new
II.2.2. Toán tử số học
Example Name Result
$a + $b Addition Sum of $a and $b.
$a - $b Subtraction Difference of $a and $b.
$a * $b
Multiplicatio
n
Product of $a and $b.
$a / $b Division Quotient of $a and $b.
$a % $b Modulus
Remainder of $a divided by
$b.
II.2.3. Toán tử gán
Toán tử gán (=) cho phép bạn gán một biểu thức (vế
phải) cho 1 biến (vế trái)
Toán tử gán trả về giá trị của biểu thức vế phải, do
đó có thể dùng nhiều phép gán liên tiếp nhau
Ngoài ra, còn có các phép toán gọi là phép toán kết
hợp cho hầu hết các toán tử số học để thay đổi giá
trị 1 biến theo phép toán số học đó (+=, -=, *=, /=, .=
...)
<?php
$a = 4; echo "$a\n";
$a = $b = $c = 10; echo "$a,$b,$c\n";
$a = ($b=4) + 5; echo "$a,$b\n";
$a .= "quang"; echo "$a\n";
$a = ($b+=10) + 2; echo "$a";
?>
II.2.4. Các toán tử trên bit
Example Name Result
$a & $b And
Bits that are set in both $a and $b are
set.
$a | $b Or
Bits that are set in either $a or $b are
set.
$a ^ $b Xor
Bits that are set in $a or $b but not both
are set.
~ $a Not
Bits that are set in $a are not set, and
vice versa.
$a <<
$b
Shift
left
Shift the bits of $a $b steps to the left
(each step means "multiply by two")
<?php
echo 12 ^ 9; // Outputs '5'
echo "12"^"9"; // Outputs the Backspace character
(ascii 8)
// ('1' (ascii 49)) ^ ('9' (ascii 57)) =
#8
echo "hallo"^"hello"; // Outputs the ascii values #0 #4 #0
#0 #0
// 'a' ^ 'e' = #4
?>
II.2.5. Toán tử so sánh
Example Name Result
$a == $b Equal TRUE if $a is equal to $b.
$a === $b Identical
TRUE if $a is equal to $b, and they are of the same
type. (PHP 4 only)
$a != $b Not equal TRUE if $a is not equal to $b.
$a $b Not equal TRUE if $a is not equal to $b.
$a !== $b Not identical
TRUE if $a is not equal to $b, or they are not of the
same type. (PHP 4 only)
$a < $b Less than TRUE if $a is strictly less than $b.
$a > $b Greater than TRUE if $a is strictly greater than $b.
$a <= $b
Less than or
equal to
TRUE if $a is less than or equal to $b.
$a >= $b
Greater than or
equal to
TRUE if $a is greater than or equal to $b.
II.2.6. Toán tử điều khiển lỗi
Toán tử điều khiển lỗi (@) dùng để đặt trước các
hàm, biểu thức. Khi đó tất cả các thông báo lỗi trong
hàm, biểu thức đó bị bỏ qua
<?php
$b = @file("a adf a") or
die("Khong the mo file");
?>
II.2.7. Toán tử thực thi
Toán tử thực thi (``) cho phép bạn gọi các
lệnh trên console, (các thông tin tin này có
thể viết ra output hoặc gán vào các biến)
<?php
$output = `dir c:\\`;
echo "$output";
?>
II.2.8. Toán tử tăng, giảm
<?php
$a = 5;
echo "Should be 5: " . $a++ . "\n";
echo "Should be 6: " . $a . "\n";
$a = 5;
echo "Should be 6: " . ++$a . "\n";
echo "Should be 6: " . $a . "\n";
$a = 5;
echo "Should be 5: " . $a-- . "\n";
echo "Should be 4: " . $a . "\n";
$a = 5;
echo "Should be 4: " . --$a . "\n";
echo "Should be 4: " . $a . "\n";
?>
II.2.9. Các toán tử logic
Example Name Result
$a and $b And TRUE if both $a and $b are TRUE.
$a or $b Or TRUE if either $a or $b is TRUE.
$a xor $b Xor TRUE if either $a or $b is TRUE, but not both.
! $a Not TRUE if $a is not TRUE.
$a && $b And TRUE if both $a and $b are TRUE.
$a || $b Or TRUE if either $a or $b is TRUE.
II.2.10. Toán tử trên string
Có 2 toán tử trên string ( . và .=)
<?php
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello
World!"
$a = "Hello ";
$a .= "World!"; // now $a contains "Hello
World!“
?>
II.2.11. Toán tử trên mảng
Đối với mảng, chỉ có toán tử +, toán tử này
nối 2 mảng với nhau (các phần trùng khóa
được lấy ở toán hạng trái)
<?php
$a = array("a" => "apple", "b" =>
"banana");
$b = array("a" =>"pear",
"b" => "strawberry",
"c" => "cherry");
$c = $a + $b;
var_dump($c);
?>
II.3. Các cấu trúc điều khiển
II.3.1. Cấu trúc if, else, elseif, endif
II.3.2. Cấu trúc while / do...while
II.3.3. Cấu trúc for / for...each
II.3.4. Sử dụng break, continue trong các vòng
lặp
II.3.5. Cấu trúc switch
II.3.1. Cấu trúc if, else, elseif, endif
<?php
if ($a > $b) {
echo "a is bigger than b";
$b = $a;
}
if ($a > $b) {
echo "a is bigger than b";
} else {
echo "a is NOT bigger than b";
}
if ($a > $b) {
echo "a is bigger than b";
} elseif ($a == $b) {
echo "a is equal to b";
} else {
echo "a is smaller than b";
}
?>
A is equal to 5
II.3.2. Cấu trúc while / do...while
<?php
$i = 1;
while ($i <= 10) {
print $i++;
}
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
$i = 0;
do {
print $i;
} while ($i > 0);
?>
II.3.3. Cấu trúc for / for...each
<?php
echo "--------------------\n";
for ($i = 1; $i <= 10; $i++) {
print "$i\n";
}
echo "--------------------\n";
for ($i = 1; ; $i++) {
if ($i > 10) break;
print "$i\n";
}
echo "--------------------\n";
$i = 1;
for (;;) {
if ($i > 10)break;
print "$i\n";
$i++;
}
echo "--------------------\n";
for ($i = 1; $i <= 10;
print "$i\n", $i++);
echo "--------------------\n";
for ($i = 1; $i<=20; $i++):
print "$i\n";
endfor
?>
II.3.3. Cấu trúc for / for...each (2)
foreach (array_expression as $value) statement
foreach (array_expression as $key => $value) statement
<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value\n";
}
foreach ($arr as $value) {
echo "Value: $value\n";
}
foreach ($arr as $key => $value) {
echo "Key: $key; Value: $value\n";
}
foreach (array(1, 2, 3, 4, 5) as $v) {
print "$v\n";
}
?>
II.3.4. Sử dụng break, continue trong
các vòng lặp
<?php
$arr = array
('one','two','three','four','stop','five');
while (list (, $val) = each ($arr)) {
if ($val == 'stop')
break; // Viết “break 1;” cũng được
echo "$val\n";
}
while (list ($key, $value) = each ($arr)) {
if (!($key % 2)) // Bỏ qua số lẻ
continue;
do_something_odd ($value);
}
?>
II.3.4. Sử dụng break, continue trong
các vòng lặp (2)
$i = 0;
while ($i++ < 5) {
echo "Outer\n";
while (1) {
echo " Middle\n";
while (1) {
echo " Inner\n";
continue 3;
}
echo "This never gets output.\n";
}
echo "Neither does this.\n";
}
?>
II.3.5. Cấu trúc switch
<?php
if ($i == 0) {
print "i equals 0";
} elseif ($i == 1) {
print "i equals 1";
} elseif ($i == 2) {
print "i equals 2";
}
switch ($i) {
case 0:
print "i equals 0";
break;
case 1:
print "i equals 1";
break;
case 2:
print "i equals 2";
break;
}
?>
II.4. Hàm
II.4.1. Hàm tự định nghĩa (user-defined)
II.4.2. Truyền tham số
II.4.3. Giá trị trả về
II.4.4. Biến hàm
II.4.1. Hàm tự định nghĩa (user-defined)
<?php
function foo ($arg_1, $arg_2, ..., $arg_n) {
echo "Example function.\n";
return $retval;
}
?>
<?php
function foo() {
function bar() {
echo "I don't exist until foo() is
called.\n";
}
}
// Không thể gọi bar() vì nó chưa được đình
nghĩa
foo();
// Bây giờ thì có thể gọi bar()
bar();
?>
II.4.2. Truyền tham số
PHP hỗ trợ truyền tham số vào hàm, truyền tham số dưới
dạng tham chiếu (reference), truyền tham số với giá trị mặc
định
<?php
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
function add_some_extra(&$string) {
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;// outputs 'This is a string, and something
extra.
?>
II.4.2. Truyền tham số (2)
function makecoffee ($type = "cappuccino") {
return "Making a cup of $type.\n";
}
echo makecoffee ();
echo makecoffee ("espresso");
function makeyogurt ($type = "acidophilus", $flavour)
{
return "Making a bowl of $type $flavour.\n";
}
// won't work as expected
echo makeyogurt ("raspberry");
function makeyogurt ($flavour, $type = "acidophilus")
{
return "Making a bowl of $type $flavour.\n";
}
// works as expected
echo makeyogurt ("raspberry");
II.4.2. Truyền tham số (3)
Bạn có thể truyền tham số với số lượng không xác định. Khi đó
sẽ sử dụng các hàm sau
func_num_args(): Số lượng tham số
func_get_args(): Lấy danh sách các tham số
<?php
function mwrite() {
$arg = func_get_args();
foreach($arg as $value) echo "$value\n";
}
mwrite("Khoa CNTT", "Truong DHXD", "Lop
46PM1");
?>
II.4.3. Giá trị trả về
Để trả về giá trị của hàm, sử dụng lệnh return. Có thể sử dụng
bất cứ kiểu nào trong giá trị trả về của hàm (kể cả mảng và đối
tượng)
<?php
function square ($num) {
return $num * $num;
}
echo square (4); // outputs '16'.
function small_numbers() {
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
function &returns_reference() {
return $someref;
}
$newref =& returns_reference();
?>
II.4.4. Biến hàm
Bạn có thể sử dụng các biến hàm (tức là bạn có thể gọi hàm dưới dạng
ten_bien() ).
Biến hàm thường được sử dụng cho các hàm callback
<?php
function foo() {
echo "In foo()\n";
}
function bar($arg = '') {
echo "In bar(); argument was '$arg'.\n";
}