Bài giảng PHP (Hypertext Preprocessing) - Chương 2: PHP căn bản trình bày các nội dung chính sau: Biến, kiểu và hằng, toán tử và biểu thức, các câu lệnh điều khiển, hàm, lớp và đối tượng, tham chiếu,... Mời các bạn cùng tham khảo để nắm nội dung chi tiết.
Trang 1II 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)
Trang 2II.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
Trang 3II.1.1.1 Tên biến
<?php
$var = "Bob" ;
$Var = "Joe" ;
echo "$var, $Var" ; // outputs "Bob, Joe"
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
Trang 4II.1.1.2 Tham chiếu
Giống ngôn ngữ C, trong PHP bạn có thể sử dụng tham chiếu
$bar = & $foo ; // This is a valid assignment
$bar = &( 24 * 7 );// Invalid references an unnamed expression
Trang 5II.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 <br>" ); // In ra gia tri cua bien a
echo( " $quang <br>" ); // In ra gia tri cua bien quang
$ { "quang" } = 13432 ; // Gian truc tiep bien dong
Trang 6II.1.1.4 Phạm vi của biến
Trang 7II.1.1.4 Phạm vi của biến (2)
$GLOBALS [ "b" ] =
$GLOBALS [ "a" ] +
$GLOBALS [ "b" ];
} Sum();
echo $b ;
?>
Trang 8II.1.1.4 Phạm vi của biến (3)
static $a = 0 ;
echo $a ;
$a ++;
} Test();
Test();
?>
Trang 9II.1.1.4 Phạm vi của biến (4)
Trang 11echo 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)
Trang 12II.1.2.1 Kiểu boolean
Trang 13II.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)
Trang 14II.1.2.3 Kiểu float
$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)
?>
Trang 15II.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
Trang 16II.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' ;
Trang 17II.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
Trang 18II.1.2.4 Kiểu String (4)
Kiểu Heredoc
<?php
$str = <<<EOA
Example of string <br>
spanning multiple lines<br>
using heredoc syntax.<br>
Trang 19II.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
Trang 20II.1.2.4 Kiểu String (6)
Truy cập đến từng ký tự của String
Trang 21II.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
Trang 22II.1.2.5 Kiểu Array (2)
echo var_dump ( $ar ), "<br>" ;
$ar = array( "a" => 10 , 20 , 30 , 40 );
echo var_dump ( $ar ), "<br>" ;
$ar = array( "a" =>array( 1 , 2 , 3 , 4 , 5 ), 20 , 30 , 40 );
echo var_dump ( $ar );
?>
Trang 23II.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
Trang 24II.1.2.6 Kiểu Object
<?php
class Xeco {
var $sobanh ; function BaoNhieuBanh() {
echo( $this ->sobanh); }
Trang 25II.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" );
?>
Trang 26II.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
Trang 27II.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
Trang 28II.2.1 Mức độ ưu tiên các toán tử
Trang 29II.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
Trang 30II.2.3 Toán tử gán
phải) cho 1 biến (vế trái)
đó có thể dùng nhiều phép gán liên tiếp nhau
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 đó (+=, -=, *=, /=, = .)
Trang 31II.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
Shift the bits of $a $b steps to the left (each step means "multiply by two")
Trang 32II.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
Greater than or
Trang 33II.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" );
?>
Trang 34II.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" ;
?>
Trang 35II.2.8 Toán tử tăng, giảm
<?php
$a = 5 ;
echo "Should be 5: " $a ++ "<br /> \n " ; echo "Should be 6: " $a "<br /> \n " ;
$a = 5 ;
echo "Should be 6: " ++ $a "<br /> \n " ; echo "Should be 6: " $a "<br /> \n " ;
$a = 5 ;
echo "Should be 5: " $a "<br /> \n " ; echo "Should be 4: " $a "<br /> \n " ;
$a = 5 ;
echo "Should be 4: " $a "<br /> \n " ; echo "Should be 4: " $a "<br /> \n " ;
?>
Trang 36II.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
Trang 37II.2.10 Toán tử trên string
Có 2 toán tử trên string ( và =)
Trang 38II.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)
Trang 39II.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
Trang 40II.3.1 Cấu trúc if, else, elseif, endif
Trang 41II.3.2 Cấu trúc while / do while
?>
Trang 42II.3.3 Cấu trúc for / for each
print " $i \n " , $i ++);
echo " - \n " ; for ( $i = 1 ; $i <= 20 ; $i ++):
print " $i \n " ; endfor
Trang 43II.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 <br> \n " ;
}
foreach ( $arr as $value ) {
echo "Value: $value <br> \n " ;
}
foreach ( $arr as $key => $value ) {
echo "Key: $key ; Value: $value <br> \n " ;
Trang 44II.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 )) {
Trang 45II.3.4 Sử dụng break, continue trong các vòng lặp (2)
Trang 46II.3.5 Cấu trúc switch
Trang 48II.4.1 Hàm tự định nghĩa (user-defined)
<?php
function foo ( $arg_1 , $arg_2 , , $arg_n ) {
echo "Example function \n ";
Trang 49II.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.' ;
Trang 50II.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" );
Trang 51II.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ố
Trang 52II.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 ;
Trang 53function bar( $arg = '' ) {
echo "In bar(); argument was ' $arg '.<br>\n" ;
}
// This is a wrapper function around echo
function echoit( $string ) {
Trang 55II.5 Lớp & đối tượng
II.5.1 Serializing đối tượng – đối tượng trong session
II.5.2 Tham chiếu bên trong constructor
II.5.3 So sánh đối tượng trong PHP4
II.5.4 So sánh đối tượng trong PHP5
Trang 56II.5.1 Serializing đối tượng – đối tượng trong session
Hàm serialize() dùng để lưu trữ đối tượng, hàm trả về một chuỗi các byte để lưu thông tin của đối tượng
Hàm unserialize() dùng để khôi phục đối tượng được lưu giữ bởi hàm
$ob1 ->c = "Nguyen Phu Quang" ;
$luu = serialize ( $ob1 );
echo " $luu \n " ;
$ob2 = unserialize ( $luu );
var_dump ( $ob2 );
Trang 57II.5.2 Tham chiếu bên trong constructor
$global_ref [] = & $this ;
$this -> setName ( $name );
}
function setName ( $name ) {
$this ->m_name = $name ;
$a = new AClass( "a" );
$b =& new AClass( "b" );
Trang 58II.5.3 So sánh đối tượng trong PHP4
Trang 59II.5.3 So sánh đối tượng trong PHP4
<?php
class AClass {
var $set ;
function addFlag( $key , $value ) {
$this ->set[ $key ] = $value ;
}
function removeFlag( $key ) {
unset( $this ->set[ $key ]);
Trang 60II.5.4 So sánh đối tượng trong PHP5
So sánh đối tượng trong PHP5 có một số
thay đổi so với PHP4
Đối với phép so sánh ==, hai đối tượng bằng nhau nếu có chung các thuộc tính và cùng thuộc 1 lớp
Đối với phép so sánh ===, hai đối tượng
được gọi là bằng nhau nếu chúng cùng tham chiếu đến 1 phiên bản của 1 lớp
Trang 61II.6 Tham chiếu (reference)
II.6.1 Các trường hợp sử dụng tham chiếu
II.6.2 Các trường hợp ko sử dụng tham chiếu II.6.3 Truyền tham chiếu
II.6.4 Trả về tham chiếu
II.6.5 Unset tham chiếu
Trang 62II.6.1 Các trường hợp sử dụng tham chiếu
Tham chiếu cho phép bạn sử dụng 1 biến với nhiều tên khác nhau
Đối với đối tượng, nên sử dụng phép gán tham chiếu khi dùng toán tử new để tránh phép gán tạo ra thêm 1 phiên bản của đối tượng
Để thay đổi giá trị của tham số truyền vào trong hàm, bạn có thể sử dụng tham
$d =& new AClass();
function increment(& $num ) {