Mỗi file class được tạo ra đều nên được ghi chú lại các thông tin cần thiết. DocBlock là một chuẩn ghi chú được sử dụng rộng rãi dùng để ghi chú lại các thông tin cho class và đã được tích hợp vào các môi trường phát triển web phổ biến như Eclipse hoặc NetBeans.
Trong đó, phần thơng tin ở giữa sẽ chứa tên class, mô tả về class, và các tag được định nghĩa sẵn của DocBlock:
@author: Tên tác giả của class. Nếu có nhiều tác giả, có thể sử dụng nhiều @author. Định dạng để ghi @author là:
@author Tên Đầy Đủ <email>
@copyright: Thông tin bản quyền với định dạng là:
@ copyright Chủ Sở Hữu
@license: Địa chỉ tới giấy phép tác quyền với định dạng ví dụ:
@license http://www.example.com/path/to/license.txt Tên Giấy Phép
@var: Thông tin về kiểu dữ liệu và mô tả các biến hoặc properties của class. Định dạng:
@var kiểu mô tả
@param: Thông tin về kiểu dữ liệu và mô tả các tham số của function hay. Định dạng:
@param kiểu $tênThamSố mô tả
@return: Thông tin về kiểu dữ liệu và mô tả giá trị trả về của function hay method. Định dạng:
@return kiểu mơ tả
Ví dụ về ghi chú theo DocBlock: /**
* A simple class *
* This is the long description for this class, * which can span as many lines as needed. It is
* not required, whereas the short description is * necessary.
*
* It can also span multiple paragraphs if the * description merits that much verbiage. *
* @author Jason Lengstorf <jason.lengstorf@ennuidesign.com> * @copyright 2010 Ennui Design
* @license http://www.php.net/license/3_01.txt PHP License 3.01 */ class SimpleClass { /** * A public variable *
* @var string stores data for the class */
public $foo; /**
* Sets $foo to a new value upon class instantiation *
* @param string $val a value required for the class * @return void
*/
$this->foo = $val; }
/**
* Multiplies two integers *
* Accepts a pair of integers and returns the * product of the two.
*
* @param int $bat a number to be multiplied * @param int $baz a number to be multiplied * @return int the product of the two parameters */
public function bar($bat, $baz) { return $bat * $baz;
} }
2.5 BÀI TẬP
Bài 1: Tạo class User gồm các properties: $username, $password, $firstName ,
$lastName
Bài 2: Tạo constructor cho class: __construct($username, $password,
$firstName, $lastName)
Lưu ý: password được hashed bằng hàm password_hash("chuỗi cần hash", PASSWORD_DEFAULT);
Tạo public method:
getFullname(): trả về $firstName $lastName
Bài 3: Tạo file register.php, tạo form đăng ký thông tin gồm username, password, firstName, lastName.
Xuất ra thông tin của user vừa nhập bên dưới form theo table:
Bài 4: Tạo public method login($username, $password), kiểm tra nếu
$username = admin và $password = giá trị hash của 12345 thì return true.
Lưu ý: sử dụng hàm password_verify ( string $password , string $hash ) để kiểm tra password nhập vào & password đã hashed.
Tạo file login.php chứa form login, nếu login thành cơng thì hiện thơng báo “Logged in successfully” bên dưới form.
Bài 5: Tạo class Student kế thừa từ class User.
Student có thêm property là $gpa (điểm trung bình)
Viết constructor cho Student kế thừa từ User nhưng thêm $gpa
Viết public method xếp loại cho Student rank() như sau:
GPA < 5: yếu, 5 <= GPA < 7: trung bình, 7 <= GPA < 8: khá, GPA >= 8: giỏi
Hàm return về xếp loại của một sinh viên. • Tạo file student.php, tạo
MẢNG VÀ CHUỖI CHƯƠNG 3:
Mảng và chuỗi là hai kiểu dữ liệu quan trọng và được sử dụng rất nhiều trong lập trình web, chương này sẽ giúp cho sinh viên có khả năng:
- Trình bày một cách chính xác cú pháp các hàm xử
lý cho từng loại mảng.
- Trình bày một cách chính xác cú pháp các hàm thường được sử dụng để xử lý một một chuỗi.
- Phân biệt được cách lưu trữ và truy xuất giá trị của mảng và chuỗi.
Qua đó, sinh viên có đủ kiến thức về mảng và chuỗi để có thể áp dụng vào bài tập cũng như xử lý mảng chuỗi một cách linh hoạt và hợp lý.
3.1 MẢNG
3.1.1 | GIỚI THIỆU
Mảng là một biến đặc biệt, có thể lưu trữ nhiều giá trị trong một biến. Có 3 loại mảng trong PHP:
Mảng indexed
Mảng associative
Mảng đa chiều
3.1.1.1 | Mảng indexed
Là mảng có chỉ số index là một giá trị số. Có 2 cách để tạo ra một mảng indexed sử dụng hàm array():
Cách 1: Chỉ số index của mảng được tạo ra một cách tự động, và bắt đầu từ 0
$cars = array("Volvo", "BMW", "Toyota");
Cách 2: Chỉ số index được tạo ngẫu nhiên bằng tay
$cars = array(0=>"Volvo", 2=>"BMW", 5=>"Toyota"); Dùng vòng lặp for hoặc foreach để duyệt mảng.
foreach( $car as $value ) {
echo "Value is $value <br />"; }
Kết quả: Volvo BMW Toyota
3.1.1.2 | Mảng associative
Là mảng có chỉ số index là một giá trị chuỗi. Có 2 cách để tạo ra một mảng associative:
Cú pháp:
array(key=>value)
Cách 1: Sử dụng hàm array()
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
Cách 2: Tạo từng phần tử $age['Peter'] = "35"; $age['Ben'] = "37"; $age['Joe'] = "43"; Dùng vòng lặp foreach để duyệt mảng. <?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"); foreach($age as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value; echo "<br>";
} ?>
Lưu ý: Khi tạo ra mảng associative, ta phải tạo luôn cả key và value
3.1.1.3 | Mảng đa chiều
Là mảng mà mỗi phần tử trong mảng có thể chứa một mảng khác, và phần tử trong mảng con lại có thể là một mảng con khác, dạng mảng lồng mảng.
Ví dụ: <?php
$marks = array( "student1" => array ( "physics" => 35, "maths" => 30, "chemistry" => 39 ), "student2" => array ( "physics" => 30, "maths" => 32, "chemistry" => 29 ) );
Ví dụ trên ta tạo ra một biến $marks để lưu thông tin tên SV. Mỗi phần tử SV lại là một mảng lưu tên và điểm 3 môn của sinh viên đó.
3.1.2 | CÁC HÀM XỬ LÝ
3.1.2.1 | Hàm count()
Hàm count() dùng để trả về chiều dài của một mảng. Cú pháp:
count(array)
array: mảng
Ví dụ: <?php
echo count($colors); ?>
Kết quả: 3
3.1.2.2 | Hàm sort()
Hàm sort() được dùng để sắp xếp mảng indexed theo thứ tự tăng dần. Cú pháp:
sort(array)
array: mảng
Ví dụ: <?php
$colors = array("Pink", "Blue", "Yellow"); sort($colors); $clength = count($colors); for($x = 0; $x < $clength; $x++) { echo $colors [$x]; echo "<br>"; } ?> Kết quả: Blue Pink Yellow 3.1.2.3 | Hàm rsort()
Cú pháp: rsort(array)
array: mảng
Ví dụ: <?php
$colors = array("Pink", "Blue", "Yellow"); rsort($colors); $clength = count($colors); for($x = 0; $x < $clength; $x++) { echo $colors [$x]; echo "<br>"; } ?> Kết quả: Yellow Pink Blue 3.1.2.4 | Hàm asort()
Hàm asort() được dùng để sắp xếp mảng associative theo thứ tự tăng dần của giá trị mảng.
Cú pháp: asort(array)
array: mảng
<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"); asort($age);
foreach($age as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?> Kết quả: Key=Peter, Value=35 Key=Ben, Value=37 Key=Joe, Value=43 3.1.2.1 | Hàm ksort()
Hàm ksort() được dùng để sắp xếp mảng associative theo thứ tự tăng dần của khóa. Cú pháp:
ksort(array)
array: mảng
Ví dụ: <?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"); ksort($age);
foreach($age as $x => $x_value) {
echo "<br>"; } ?> Kết quả: Key=Ben, Value=37 Key=Joe, Value=43 Key=Peter, Value=35 3.1.2.1 | Hàm arsort()
Hàm rsort() được dùng để sắp xếp mảng associative theo thứ tự giảm dần của giá trị mảng. Cú pháp: arsort(array) array: mảng Ví dụ: <?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"); arsort($age);
foreach($age as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value; echo "<br>";
} ?> Kết quả:
Key=Ben, Value=37 Key=Peter, Value=35
3.1.2.1 | Hàm krsort()
Hàm rsort() được dùng để sắp xếp mảng associative theo thứ tự giảm dần của khóa. Cú pháp:
krsort(array)
array: mảng
Ví dụ: <?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"); krsort($age);
foreach($age as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?> Kết quả: Key=Peter, Value=35 Key=Joe, Value=43 Key=Ben, Value=37 3.2 CHUỖI 3.2.1 | GIỚI THIỆU
Ví dụ:
$name = "name";
$variable = 'My $name will not print!'; echo $variable. "<br>";
$variable = "My $name will not print!"; echo $variable;
Kết quả:
My $variable will not print! My name will print!
Lưu ý: Chuỗi đặt trong dấu nháy đơn ' sẽ được xử lý hầu như theo nghĩa đen, trong khi chuỗi đặt trong dấu nháy kép " sẽ thay tên biến bằng giá trị của nó khi in ra.
3.2.2 | CÁC HÀM XỬ LÝ
3.2.2.1 | Hàm strlen()
Hàm strlen() dùng để trả về chiều dài của một chuỗi. Cú pháp:
strlen(string)
string: chuỗi Ví dụ:
<?php
echo strlen("Hello world!"); ?>
Kết quả: 12
3.2.2.2 | Hàm substr()
Hàm substr() trả về chuỗi con từ một phần của chuỗi cha. Cú pháp:
substr(string, start, length)
string: chuỗi cha
start: qui định vị trí bắt đầu lấy chuỗi con. Khơng bắt buộc. Có 3 giá trị: o số dương: qui định vị trí tính từ đầu chuỗi.
o số âm: qui định vị trí tính lấy từ cuối chuỗi.
length: qui định chiều dài chuỗi con. Ví dụ:
<?php
echo substr("Hello world",6);
echo substr("Hello world",0,-1)."<br>"; echo substr("Hello world",1,8)."<br>"; echo substr("Hello world",0,-6)."<br>"; ?> Kết quả: World Hello worl ello wor Hello 3.2.2.1 | Hàm strrev()
Hàm strrev() dùng để đảo ngược thứ tự của một chuỗi. Cú pháp:
string: chuỗi Ví dụ:
<?php
echo str_word_count("Hello world!"); ?>
Kết quả: !dlrow olleH
3.2.2.1 | Hàm strpos()
Hàm strpos() dùng để tìm kiếm một chuỗi hay ký tự bên trong một chuỗi. Nếu so khớp, hàm sẽ trả về vị trí đầu tiên mà chuỗi hay ký tự được tìm thấy bên trong một chuỗi, trong đó ký tự đầu tiên bắt đầu từ 0. Ngược lại, hàm trả về về FALSE.
Cú pháp:
strpost(string, text)
string: chuỗi.
text: văn bản muốn tìm trong chuỗi.
Ví dụ: <?php
echo strpost("Hello world!" , "world"); ?>
Kết quả: 6
3.2.2.2 | Hàm str_replace()
Hàm str_replace() dùng để thay thế một vài từ trong văn bản. Cú pháp:
text_1: từ bị thay thế trong chuỗi.
text_2: từ thay thế.
string: chuỗi. Ví dụ:
<?php
echo str_replace("world", "Dolly", "Hello world!"); ?>
Kết quả: Hello Dolly!
3.2.2.3 | Hàm explode()
Hàm explode() dùng để chuyển một chuỗi thành kiểu mảng. Cú pháp:
explode (separator, string)
separator: chuỗi tách.
string: chuỗi. Ví dụ:
<?php
$str = "Hello world. It's a beautiful day."; print_r (explode(" ",$str));
?> Kết quả:
Array ( [0] => Hello [1] => world. [2] => It's [3] => a [4] => beautiful [5] => day. )
3.2.2.4 | Hàm implode()
Cú pháp:
implode (separator, string)
separator: chuỗi ghép giữa các phần tử mảng. Không bắt buộc, mặc định là chuỗi rỗng.
string: chuỗi. Ví dụ:
<?php
$arr = array('Hello','World!','Beautiful','Day!'); echo implode(" ",$arr)."<br>";
?> Kết quả:
Hello World! Beautiful Day!
3.2.2.5 | Hàm str_split()
Hàm str_slit() dùng để tách các ký tự trong một chuỗi thành các phần tử mảng. Cú pháp:
str_split(string,length)
string: chuỗi.
length: qui định chiều dài của mỗi phần tử trong mảng. (không bắt buộc, mặc định bằng 1) . Ví dụ 1: <?php print_r(str_split("Hello")); ?> Kết quả:
Ví dụ 2: <?php print_r(str_split("Hello",3)); ?> Kết quả: Array ( [0] => Hel [1] => lo ) 3.2.2.6 | Hàm number_format() Hàm number_format () dùng để định dạng một giá trị số. Cú pháp: number_format(number,decimals,decimalpoint,separator) number: số
decimals: qui định số lượng số thập phân. Không bắt buộc.
decimalpoint: qui định chuỗi phân cách với số thập phân. Không bắt buộc.
separator: qui định chuỗi phân cách hàng ngàn .Không bắt buộc.
Lưu ý: Nếu qui định tham số separator, phải qui định tất cả tham số không bắt buộc ở trên. Ví dụ: <?php echo number_format("1000000")."<br>"; echo number_format("1000000",2)."<br>"; echo number_format("1000000",2,",","."); ?> Kết quả: 1,000,000 1,000,000.00
1.000.000,00
3.2.2.7 | Hàm strip_tags()
Hàm strip_tags() bỏ qua các thẻ HTML, XML và PHP xuất hiện trong chuỗi. Cú pháp:
strip_tags(string,allow)
string: chuỗi.
allow: qui định thẻ nào được phép áp dụng trong chuỗi. Không bắt buộc.
Ví dụ 1: <?php
echo strip_tags("Hello <b>world!</b>"); ?>
Kết quả: Hello world! Ví dụ 2: <?php
echo strip_tags("Hello <b><i>world!</i></b>","<b>"); ?>
Kết quả: Hello world!
3.2.2.8 | Hàm trim()
Hàm trim() dùng để loại bỏ ký tự theo qui định ở 2 đầu của một chuỗi. Cú pháp:
charlist: qui định ký tự muốn loại bỏ ở 2 đầu chuỗi. Không bắt buộc, mặc định hàm sẽ loại bỏ những ký tự sau: o "\0" – NULL o "\t" – tab o "\n" - new line o "\x0B" - vertical tab o "\r" - carriage return o " " - ordinary white space Ví dụ: <?php $str = "Hello World!"; echo $str . "<br>"; echo trim($str,"Hed!"); ?> Kết quả: Hello World! llo Worl 3.2.2.9 | Hàm sha1()
Hàm sha1() dùng mã hóa chuỗi theo thuật tốn mã hóa sha1. Cú pháp:
sha1(string,raw)
string: chuỗi.
raw: qui định chuỗi mã hóa ở hệ nhị phân hay hệ 16. Không bắt buộc, mặc định
là hệ 16.
o FALSE: 40 ký tự hệ 16. Ví dụ: <?php $str = "Hello"; echo sha1($str); ?> Kết quả: f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 3.3 BÀI TẬP
A. Tạo thư mục tuan2_hoten và làm các bài tập sau:
Bài 1: Tạo file bai1.php như sau:
Cho chuỗi sau “Chào mừng các bạn đến với mơn học Lập Trình Web 1”.
a. Sử dụng hàm để lấy và in ra chuỗi “Lập Trình Web 1” từ chuỗi trên.
b. Sử dụng hàm để lấy và in ra chuỗi trên sao cho mỗi chữ nằm trên một dòng
như sau: Chào mừng các bạn đến với …
Bài 2: File bai2.php và bai2_kq.php.
Ví dụ: 23/09/2015 => 23-09-15
b. Xuất ra định dạng ngày “month dd, yyyy”.
Ví dụ: 23/09/2015 => September 23, 2015
Bài 3: File bai3.php và bai3_kq.php.
Nhập vào mảng >10 phần tử (mỗi phần tử cách nhau bởi dấu “,”).
a. Tính tổng giá trị các phần tử trong mảng.
b. Xác định phần tử nhỏ nhất trong mảng.
c. Xác định phần tử lớn nhất trong mảng.
d. Loại bỏ phần tử cuối cùng của mảng trên.
e. Loại bỏ phần tử đầu tiên của mảng trên.
Bài 4: File bai4.php và bai4_kq.php.
Bài 5: (*)Tạo file bai5.php với yêu cầu xuất ra chuỗi không dấu từ chuỗi có
dấu. Ví dụ:
input: Lập Trình Web 1 output: lap-trinh-web-1
Bài 6: Tạo file index.php cho người dùng chọn 5 bài tập trên, và mỗi bài tập tạo liên kết quay về lại trang index.php.
B. Tạo thư mục tuan3_hoten và làm các bài tập sau:
Bài 1: Tạo file bai1.php như sau:
Khi người dùng nhấn nút Submit, trang web sẽ chuyển sang hello.php có nội dung như sau:
Xin chào [Họ tên]
với [Họ tên] được nhập vào từ form.
Bài 2: Thực hiện form tìm kiếm trong file bai2.php
Khi người dùng nhấn nút Tìm, kết quả sẽ hiển thị ngay bên dưới form như sau: Kết quả tìm kiếm với từ khóa [Từ khóa]:
Khi người dùng nhấn nút Submit, hiển thị thơng tin người dùng đã nhập bên dưới form (yêu cầu giữ lại dữ liệu đã nhập bên trong các control).
Name: Email: Website: Comment: Gender:
Bài 4: Thực hiện form sau trong trang bai4.php:
Người dùng sẽ chọn các món từ thực đơn. Lưu ý: người dùng có thể giữ Ctrl để chọn nhiều món trong một nhóm thực đơn. Khi người dùng nhấn vào nút Submit, trang menu.php sẽ hiện thị thông tin thực đơn người dùng đã chọn như sau:
Bài 5: Cho mảng hai chiều như sau: $products= array(
"p01" => array ( "id" => "p01",
"name" => "Apple iPhone 5S Silver 16GB",
"price" => 219.95,
"desc" => "This Certified Refurbished product is tested and Certified to look and work like new, with limited to No wear. The refurbishing process includes functionality testing, inspection, and repackaging. The product is backed by a minimum 90-day warranty, and may arrive in a generic box. The product ships with a charger and cable, but does not include headphone, Manual or SIM card. Only select sellers who maintain a high performance bar may offer Certified Refurbished products on Amazon.",
"image" => "iphone5s.jpg"
),
"p02" => array ( "id" => "p02",
"name" => "Apple iPhone 5C White 16GB",
"price" => 183.95,
"desc" => "Factory unlocked iPhones are GSM models and are ONLY compatible with GSM carriers like AT&T and T-Mobile as well as other GSM networks around the world. They WILL NOT WORK with CDMA carriers like
Sprint, Verizon and the likes. The phone requires a nano SIM card (not included in the package).", "image" => "iphone5c.jpg" ), "p03" => array (