2. Agenda
Ngôn ngữ lập trình PHP
- Giới thiệu và tổng quan về PHP:
1. Cấu trúc PHP
2. Kiểu dữ liệu, hằng và biến
3. Các phép toán trong PHP
4. Các cấu trúc điều khiển
5. Hàm trong PHP
6. Mảng (array)
- Lập trình hướng đối tượng trong PHP.
3. Giới Thiệu
• PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-
used open source general-purpose scripting language that is especially
suited for web development and can be embedded into HTML (ref:
http://php.net/manual/en/intro-whatis.php)
• PHP có cú pháp ngôn ngữ tương tự ngôn ngữ C & Perl
• Tập tin PHP có phần mở rộng là .php
• Là ngôn ngữ server-side script, tương tự như JSP, ASP.Net… thực thi ở
phía WebServer. (current 8.1, 7 is most used)
5. Các hệ thống xây dựng bằng PHP
Loại hệ thống chuyên về Quản trị nội dung, cổng thông tin
(CMS – Content Management System / Portals)
6. Các hệ thống xây dựng bằng PHP
Loại hệ thống chuyên về Diễn đàn (Forum)
SMF
PunBB
Phorum
AEF
Vanilla
UseBB
miniBB
XMB
…
7. Các hệ thống xây dựng bằng PHP
Loại hệ thống chuyên về Blog:
WordPress, Textpattern, Nucleus CMS, LifeType,
Serendipity, Dotclear, Zomplog, FlatPress, NibbleBlog,
Croogo, …
Loại hệ thống về thương mại điện tử (eCommerce)
Magento, Zen Cart, OpenCart, osCommerce, PrestaShop,
AlegroCart, Freeway, eclime, osCSS, TomatoCar, …
Loại hệ thống về đào tạo trực tuyến (LCMS–Learning
Course Management System)
Moodle, ATutor, eFront, Dokeos, Docebo, Interact,
DrupalEd, ILIAS, Open Conference Systems, Open Journal
Systems, …
8. Cơ chế thực thi của PHP
2
www.example.com
Webserver
Database
Server
Disk
driver
3
4
5
6
7
9. Ví dụ “Hello world”
Sử dụng phương thức echo "Nội dung" để xuất thông
tin lên trình duyệt.
Cấu trúc PHP
10. Cú pháp và quy ước
Các phương pháp nhúng code PHP trong trang HTML:
Quy ước viết code PHP tương tự ngôn ngữ C: kết thúc câu
lệnh dùng dấu chấm phẩy “;” , phân biệt chữ hoa, thường,…
Ghi chú trong PHP:
o // ghi chú đơn
o /* đoạn ghi chú */
Thẻ mở Thẻ đóng Ghi chú
<? ?>
Cần cấu hình server
cho phép hỗ trợ
shorthand-support
ít dùng
<?php ?> Thường dùng
<script language="php"> <script> ít dùng
11. Kiểu dữ liệu trong PHP khá đa dạng, được chia thành 2 nhóm
chính sau:
Scalar (cơ bản): boolean, int, float, string, NULL..
Composite (đa hợp): array, object,..
Kiểu dữ liệu trong PHP được khởi gán và chuyển đổi kiểu
một cách tự động trong quá trình khai báo hằng và biến.
Việc ép kiểu dữ liệu trong PHP có thể thực hiện theo cách
sau:
Tên_Biến = (Data_type) Tên_Biến;
settype($Tên_Biến, "Data_type");
Ví dụ:
<?php
$So_thuc = 10.75;
echo (int)$So_thuc; // output: 10
?>
Kiểu dữ liệu, hằng và biến
12. . Hàm hàm liên quan đến kiểu dữ liệu
Sử dụng các hàm cơ bản sau để kiểm tra kiểu dữ liệu
https://www.php.net/manual
gettype is_string isset
is_integer is_array unset
is_double is_object empty
Ví dụ:
$var = "test";
if (isset($var))
echo "Variable is Set";
if (empty($var))
echo "Variable is Empty";
Kiểu dữ liệu, hằng và biến
13. Khai báo hằng và biến
Cú pháp khai báo hằng:
define('Tên_hằng', Giá_trị);
Cú pháp khai báo biến:
$Tên_biến = Giá_trị;
Lưu ý:
Tên biến có thể bao gồm các Ký tự (A..Z, a..z), Ký số (0..9),
_, $. (phân biệt chữ hoa, chữ thường)
Không khai báo kiểu dữ liệu (kiểu dữ liệu tự động được
khởi tạo ở lần đầu tiên khi gán giá trị cho biến).
Tên biến không được bắt dầu bằng ký số (0..9).
14. Khai báo hằng và biến
<?php
define(‘Ngan98’, 98);
echo Ngan98; // xuất ra màn hình giá trị của hằng
?>
<?php
$sinhvien = ''; //đúng
$_sinh_vien = ''; //đúng
$sinh_vien90 = ''; //đúng
$90sinhvien = ''; //sai
?>
15. Toán tử cơ bản
Loại Toán tử
Toán học + - * / % ++ --
So sánh < > <= >= != == === !==
Luận lý && || ?: ,
Xử lý bit ! ~ << >> >>>
AND OR NOT XOR
Gán = += -= *= /= %=
>>= <<= &= |= ^= .=
Điều kiện ? :
16. Toán tử toán học
Toán
tử
Miêu tả Ví dụ
+ Cộng hai toán hạng A + B kết quả là 30
- Trừ toán hạng thứ hai từ toán
hạng đầu
A - B kết quả là -10
* Nhân hai toán hạng A * B kết quả là 200
/ Phép chia B / A kết quả là 2
% Phép lấy số dư B % A kết quả là 0
++ Toán tử tăng, tăng giá trị toán
hạng thêm một đơn vị
A++ kết quả là 11
-- Toán tử giảm, giảm giá trị toán
hạng đi một đơn vị
A-- kết quả là 9
Giả sử biến A giữ giá trị 10, biến B giữ 20 thì:
17. Toán tử so sánh
Toán tử Miêu tả Ví dụ
== Kiểm tra nếu 2 toán hạng bằng nhau hay không. Nếu bằng thì
điều kiện là true.
(A == B) là không true.
!= Kiểm tra 2 toán hạng có giá trị khác nhau hay không. Nếu
không bằng thì điều kiện là true.
(A != B) là true.
> Kiểm tra nếu toán hạng bên trái có giá trị lớn hơn toán hạng
bên phải hay không. Nếu lớn hơn thì điều kiện là true.
(A > B) là không true.
< Kiểm tra nếu toán hạng bên trái nhỏ hơn toán hạng bên phải
hay không. Nếu nhỏ hơn thì là true.
(A < B) là true.
>= Kiểm tra nếu toán hạng bên trái có giá trị lớn hơn hoặc bằng
giá trị của toán hạng bên phải hay không. Nếu đúng là true.
(A >= B) là không true.
<= Kiểm tra nếu toán hạng bên trái có giá trị nhỏ hơn hoặc bằng
toán hạng bên phải hay không. Nếu đúng là true.
(A <= B) là true.
Giả sử biến A giữ giá trị 10, biến B giữ 20 thì:
18. Toán tử logic
Toán tử Miêu tả Ví dụ
and Được gọi là toán tử Logic AND. Nếu cả hai toán hạng là true thì
điều kiện trở thành true
(A and B) là true.
or Được gọi là toán tử Logic OR. Nếu một trong hai toán hạng là
đúng thì điều kiện trở thành true
(A or B) là true.
&& Được gọi là toán tử Logic AND. Nếu cả hai toán hạng là true thì
điều kiện trở thành true
(A && B) là true.
|| Được gọi là toán tử Logic OR. Nếu một trong hai toán hạng là
đúng thì điều kiện trở thành true
(A || B) là true.
! Được gọi là toán tử Logic NOT. Sử dụng để đảo ngược trạng
thái logic của toán hạng. Nếu điều kiện là true thì toán tử Logic
NOT sẽ cho kết quả là false
!(A && B) là false.
19. Toán tử gán
Toán tử Miêu tả Ví dụ
= Toán tử gán đơn giản. Gán giá trị toán hạng bên phải cho toán
hạng trái
C = A + B sẽ gán giá trị của A + B vào trong C
+= Thêm giá trị toán hạng phải tới toán hạng trái và gán giá trị đó
cho toán hạng trái
C += A là tương đương với C = C + A
-= Trừ đi giá trị toán hạng phải từ toán hạng trái và gán giá trị này
cho toán hạng trái
C -= A là tương đương với C = C - A
*= Nhân giá trị toán hạng phải với toán hạng trái và gán giá trị này
cho toán hạng trái
C *= A là tương đương với C = C * A
/= Chia toán hạng trái cho toán hạng phải và gán giá trị này cho
toán hạng trái
C /= A là tương đương với C = C / A
20. Toán tử điều kiện
Toán
tử
Miêu tả Ví dụ
? : Biểu thức điều kiện Nếu điều kiện là true ? Thì giá trị X
: Nếu không thì giá trị Y
21. Các hàm liên quan đến số
abs pow decbin srand(seed)
ceil sqrt bindec rand
floor log dechex rand(min, max)
round log10 hexdec …
Ví dụ:
rand (tối thiểu, tối đa);
<? php
echo (rand (10, 30). "<br>"); //ngẫu nhiên từ 10->30
echo (rand (1, 1000000). "<br>");
echo (rand ()); //ngẫu nhiên bất kì
?>
23. Các hàm liên quan đến chuỗi
Toán tử nối chuỗi: dùng dấu chấm “.”
$str = "Hello"." World"; // $str = “Hello World”
Thường thì bạn có 4 cách để có được chuỗi ký
tự cần thiết:
Sử dụng cặp ký tự nháy đơn '.
Sử dụng cặp ký tự nháy kép ".
Sử dụng cú pháp heredoc.
Sử dụng cú pháp nowdoc.
Hàm xử lý chuỗi thông dụng
printf trim strtolower
str_pad str_replace strtoupper
strlen substr strcasecmp …
24. Biểu diễn chuỗi theo nháy đơn '
Đây là cách đơn giản để có được chuỗi ký tự. Chuỗi là
các ký tự nằm giữa cặp nháy đơn ‘ '. Khi dùng kiểu
này muốn chứa ' thì dùng ', muốn chứa thì dùng .
Ví dụ:
<?php
$value = 'Abc';
echo 'đây là một chuỗi ký tự';
echo 'Chuỗi này có ký tự ' bên trong';
echo 'Kiểu này không chèn biến $value vào chuỗi';
?>
25. Biểu diễn chuỗi theo nháy kép "
Chuỗi là các ký tự nằm giữa cặp nháy kép “ ". Khi dùng chuỗi này Php sẽ
tự động chuyển ký hiệu một số ký tự đặc biệt. Ví dụ: n là LF - dòng mới,
r là CR - đầu dòng, t là ký tự tab, $ là ký tự $, " là ký tự ", là ký tự ...
Ví dụ:
<?php
$doing = 'learning PHP';
echo "I am $doing";
?>
26. Biểu diễn chuỗi theo Heredoc
Nếu hai cách trên vẫn thấy gò bó trong việc sử dụng chuỗi thì bạn có thể
tham khảo Heredoc, nó vẫn tận dụng được cách dùng "" tự chèn giá trị
biến nhưng thoải mái hơn khi sử dụng các ký tự đặc biệt.
Heredoc bao giờ cũng bắt đầu bằng <<<, tiếp theo là một tên đinh danh do
bạn đặt rồi phải xuống dòng ngay, và cuối cùng phải kết thúc bằng định
danh; ở một dòng mới.
27. Ví dụ về chuỗi
Ví dụ sau tôi chọn định danh có tên là CONMEO:
Ví dụ :
<?
$congi = 'mèo';
$caygi = 'cau';
$str = <<<CONMEO
Con $congi mà trèo cây $caygi,
Hỏi thăm chú chuột đi đâu vắng nhà.
Chú chuột đi chợ đường xa.
Mua mắm mua muối giỗ cha chú $congi.
CONMEO;
echo $str;
?>
Kết quả:
Con mèo mà trèo cây cau,
Hỏi thăm chú chuột đi đâu vắng nhà.
Chú chuột đi chợ đường xa.
Mua mắm mua muối giỗ cha chú mèo.
28. Biểu diễn chuỗi theo Nowdoc
Cách này khá giông với Heredoc, nhưng bắt đầu bằng <<<'Định-Danh' (có
cặp '' - heredoc thì không có). Nowdoc sẽ không phân tích biến đề chèn
vào chuỗi.
Trở lại bài thơ trên nếu dùng nowdoc
29. Ví dụ về chuỗi
Ví dụ sau tôi chọn định danh có tên là CONMEO:
<?
$congi = 'mèo';
$caygi = 'cau';
$str = <<<'CONMEO'
Con $congi mà trèo cây $caygi,
Hỏi thăm chú chuột đi đâu vắng nhà.
Chú chuột đi chợ đường xa.
Mua mắm mua muối giỗ cha chú $congi.
CONMEO;
echo $str;
?>
Kết quả:
Con $congi mà trèo cây $caygi,
Hỏi thăm chú chuột đi đâu vắng nhà.
Chú chuột đi chợ đường xa.
Mua mắm mua muối giỗ cha chú $congi.
30. Cấu trúc lặp
If .. Else
..
Cấu trúc điều kiện
Switch .. Case ..
For ..
While ..
Do .. While
Tham khảo thêm: foreach, break, continue
Các cấu trúc điều khiển
31. Ví dụ cấu trúc điều khiển
$so_can_kiem_tra = 12;
$so_du = $so_can_kiem_tra % 2;
if ($so_du == 0){
echo 'Số '.$so_can_kiem_tra.' Là Số Chẵn';
}
<?php
$colors = array("red", "green", "blue", "yellow");
foreach ($colors as $value) {
echo "$value <br>"; //line break
}
?>
for ($i = 0; $i < 10; $i++){
echo $i . ' - ';
}
32. Khai báo hàm
function functionName ([parameter1]...[,parameterN])
{
statement[s] ;
[return ….. ;]
}
Trong đó:
functionName: tên hàm
parameter: danh sách tham số
return: giá trị hàm trả về nếu có
33. Khai báo hàm
Ví dụ: xây dựng hàm tính tổng
$so1 = 12;
$so2 = 13;
echo tinhtong($so1, $so2);
function tinhtong($a, $b)
{
return $a + $b;
}
34. Hàm – phạm vi biến
Ví dụ: cho biết kết quả của đoạn lệnh sau
// Biến toàn cục
$bien_toan_cuc = 12;
function kiem_tra()
{
// Biến cục bộ
$bien_cuc_bo = 13;
// Lấy biến toàn cục
global $bien_toan_cuc;
// Lấy số dư biến cục bộ chia cho biến toàn cục và
// kiểm trả về true nếu số dư = 0, ngược lại trả về false
if ($bien_cuc_bo % $bien_toan_cuc){
return true;
}
else{
return false;
}
}
Dùng từ khoá global để xác định phạm vi biến toàn cục
35. Khai báo mảng
Mảng trong PHP có thể được khai báo theo 2 cách như sau:
NumericArray (Mảng chỉ số là số): Mảng dạng số là mảng mà mỗi phần
tử của nó có một chỉ số là số nguyên. Một biến mảng dạng này chỉ số sẽ
gán một cách tự động và bắt đầu từ chỉ số là số 0 khi phần tử đầu tiên
được thêm vào, cứ thế phần tử thứ 2 thêm vào mảng sẽ có chỉ số là 1
Phần tử đầu tiên trong mảng có chỉ số index = 0
<?php
$names = ["An", "Minh", "Long"]; // khởi tạo mảng $name, đưa vào nó 3
phần tử
var_export($names); // export biến mảng
Output:
array (
0 => 'An',
1 => 'Minh',
2 => 'Long',
)
36. Khai báo mảng
Mảng trong PHP có thể được khai báo theo 2 cách như sau:
Associative Array (Mảng kết hợp): Mảnh kết hợp này thì tên chỉ số là một giá
trị nào đó do bạn gán vào, có thể là một string hay một số ...
<?php
$ngay_thu = [
'Mon' => "Thứ Hai",
'Tue' => "Thứ Ba",
'Wed' => "Thứ Tư",
'Thu' => "Thứ Năm"
];
foreach ($ngay_thu as $k => $v)
echo "$k ($v)", PHP_EOL;
?>
37. Các hàm liên quan đến mảng
• var_dump ($array) : xuất nội dung thông tin mảng
• is_array(array) : kiểm tra mảng
• count(array) : số lượng phần tử
• min(array) : phần tử nhỏ nhất trong mảng
• max(array) : phần tử lớn nhất trong mảng
• reset(array) : khởi tạo lại mảng
• array_push(array, elements) : thêm phần tử cuối mảng
• array_pop(array) : lấy phần tử cuối mảng
• array_unshift(array, elements) : thêm phần tử đầu mảng
• array_shift(array) : lấy phần tử đầu mảng
• array_merge(array, array) : trộn 2 mảng
• shuffle(array) : sắp xếp mảng ngẫu nhiên
• array_reverse : đảo mảng
• sort(array, flag) : sắp xếp mảng
38. OOP với PHP
Lập trình hướng đối tượng (object-oriented programming gọi tắt là OOP ) là cách thức lập trình hiện đại,
có nhiều ưu điểm trong việc phát triển project.
Với OOP , các thông tin cần xử lý sẽ được diễn tả thành các đối tượng. Như mỗi sản phẩm, mỗi tin tức ,
mỗi nhà sản xuất, mỗi user… là mỗi đối tượng. Trong 1 đối tượng sẽ có nhiều thông tin (properties),
nhiều hàm(methods) được khai báo, tùy nhu cầu nghiệp vụ và cách bạn tổ chức.
39. OOP với PHP
Class trong OOP
Trong OOP, bạn sẽ khai báo ra nhiều class, mỗi class đặt trong dấu { } . Bên trong là các biến và
các hàm trong class. Các biến và hàm khai báo ở đây có tầ, vực sử dụng chỉ ở trong class .
Class là khuôn mẫu để theo đó mà các đối tượng được tạo ra. Ví dụ trước khi tạo đối tượng sản
phẩm, bạn cần tạo class có tên sanpham. Trong class này bạn khai báo có tênsp, giásp,
hìnhsp…thì các đối tượng bạn khai báo sau này dựa trên class sanpham sẽ có các thông tin tênsp,
giásp, hìnhsp
<?php
class khachhang{
var $hoten;
var $namsinh;
function showhoten() { return $this->hoten; }
}
$kh1 = new khachhang;
$kh1->hoten =“Nguyen Van A";
$kh1->namsinh = 1980;
echo "<h4>Họ tên: ", $kh1->showhoten(), "</h4>";
?>
40. OOP với PHP
Constructor của class
Khi làm việc với OOP trong PHP, bạn rất thường làm việc với một hàm đặc
biệt, đó là hàm Constructor – hàm tự động chạy khi 1 đối tượng được tạo từ
class.
Trong mỗi class, hàm Contructor có tên là __construct. Trong hàm này, bạn
sẽ thường viết code khởi tạo giá trị cho các biến, kết nối database, kiểm tra
quyền của user…
Hàm __construct có thể dùng nhiều tham số nếu muốn.
Destructor của class
Destructor là hàm trong class sẽ tự động chạy khi 1 đối tượng bị hủy (khi
trang web kết thúc hoặc bạn dùng hàm unset để hủy đối tượng)
42. Các tính chất của OOP
Tính đóng gói
Các thuộc tính và hàm của đối tượng được đóng gói lại, bên
ngoài đối tượng không nhìn thấy mà chỉ có thể truy cập theo
quyền truy cập phù hợp (public, private, protected) được cấp
trước trong class.
•public: Cho phép bên ngoài đối tượng: truy cập và đổi giá trị .
•protected: Không cho phép truy cập/đổi giá trị . Chỉ cho phép
bên trong class và các class con .
•private: Chỉ cho phép truy cập/thay đổi trong phạm vi class của
đối tượng
Tính kế thừa
Một class có thể kế thừa các thuộc tính và hàm từ lớp cha. Lớp
kế thừa được gọi là lớp con. Các đối tượng có thể sử dụng lại các
đặc tính sẵn có mà không cần định nghĩa lại.
43. Các tính chất của OOP
<?php
class hocsinh{
var $ho;
var $ten;
var $ngaysinh;
var $diemtb;
function hoten() { return $this->ho . " " . $this->ten; }
function tuoi() {
$ns = explode( $this ->ngaysinh );
return date("Y") - $ns[2];
}
}
class hocsinhgioi extends hocsinh{
public $hocbong;
}
$hsg1 = new hocsinhgioi;
$hsg1 ->ho = "Phan thị";
?>
44. Các tính chất của OOP
Tính trừu tượng
Khi tương tác với đối tượng, chỉ cần quan tâm đến các thuộc
tính, hàm cần thiết. Chi tiết về nội dung không cần chú ý đến.
Nhờ đó giảm phức tạp của giải thuật, nghiệp vụ.
PHP có abstract class và interface để trừu tượng hóa các đối
tượng.
Tính đa hình
Tính đa hình (polymorphism) trong OOP cho phép các class con
có thể viết lại (override) các thuộc tính hoặc hàm từ class cha.
Các class cùng implement một interface nhưng chúng có cách
thức thực hiện khác nhau cho các method của interface đó.
Qua đó cùng 1 phương thức sẽ cho kết quả khác nhau khi được
gọi bởi các đối tượng thuộc lớp khác nhau.
45. abstract class<class_name>{
[properties … ]
abstract function func_name(…);
public function func_name(…);
}
Lớp trừu tượng
Khái niệm
Lớp trừu tượng là một lớp cha cho tất cả các lớp có cùng
bản chất. Do đó mỗi lớp dẫn xuất (lớp con) chỉ có thể kế
thừa từ một lớp trừu tượng.
Lớp trừu tượng không cho phép tạo instance (không thể tạo
được các đối tượng thuộc lớp đó).
Cú pháp khai báo lớp trừu tượng
46. abstract class Person
{
protected $ten;
protected $cmnd;
protected $namsinh;
abstract public function showInfo();
}
// Lớp này sai vì chưa viết lại hàm showInfo
class CongNhan extends Person
{
}
// Lớp này đúng vì ta đã khai báo, viết lại
// đầy đủ các hàm abstract
class SinhVien extends Person
{
public function showInfo(){
}
}
47. interface class <class_name>{
…
}
Lớp interface
Khái niệm
•Interface không phải là 1 lớp. Nó được mô tả như là 1 bản thiết kế template
cho các class có chung cách thức hoạt động.
•Vì không phải là 1 lớp nên không thể định nghĩa các thuộc tính, khởi tạo đối
tượng mà chỉ khai báo các phương thức.
Cú pháp khai báo lớp interface
48. interface A {
public function funcA();
}
interface B extends A
{
public function funcB();
}
// Lớp này đúng vì nó khai báo đầy
// đủ các hàm trong A và B
class C implements B
{
public function funcA()
{
}
public function funcB()
{
}
}
49. Tính Đa hình
Khái niệm
• Là sự đa hình của mỗi hành động cụ thể ở những đối tượng khác nhau. Ví
dụ hành động ăn ở các loài động vật hoàn toàn khác nhau như: con heo ăn
cám, hổ ăn thịt, con người thì ... ăn hết.
• Đa hình trong lập trình thì được hiểu là Lớp Con sẽ viết lại những phương
thức ở lớp cha (ovewrite).
50. // Lớp Cha
class DongVat
{
// Động Vật Ăn
public function An()
{
echo 'Động Vật Đang Ăn';
}
}
// Lớp Con
class ConHeo extends DongVat
{
public function An()
{
parent::An();
echo 'Con Heo Đang Ăn Cám';
}
}
// Khai Báo Lớp on
$conheo = new ConHeo();
// Gọi Hàm Ăn Trong Lớp ConHeo
$conheo->An();
Editor's Notes
isset — Determine if a variable is declared and is different than null
unset — Unset a given variable
Pow: XOR operator
srand — Seed the random number generator
rand — Generate a random integer
abs — Absolute value echo abs(-5); // 5 (integer)
ceil — Round fractions up
floor — Round fractions down
round — Rounds a float
https://notepad.ltd/8uuailna
Kết quả phép cộng: 43 Kết quả phép trừ: -5 Kết quả phép nhân: 456 Kết quả phép chia: 0.79166666666667 Phần dư phép chia: 19 Thêm một vào 19: 20 Giảm 20 đi 1: 19
Nếu muốn xuất giá trị của biến ra trang web thì sẽ dùng dấu nháy kép.
Còn nếu muốn xuất ra các tag HTML, thì sẽ dùng dấu nháy đơn.
Trong dấu nháy đơn chỉ có chuỗi mà thôi thằng Trình-phân-tích-cú pháp nó chả thèm kiểm tra bên trong có biến không đâu.
Điều đặc biệt của chuỗi "..." là nó tự động chèn giá trị của biến chứa bên trong khai báo chuỗi.
Chạy code trên sẽ in ra kết quả: "I am learning PHP"
Điều đặc biệt của chuỗi "..." là nó tự động chèn giá trị của biến chứa bên trong khai báo chuỗi.
Chạy code trên sẽ in ra kết quả: "I am learning PHP"
Vòng lặp foreach tự động lặp qua các phần tử trong mảng, nó lặp cho khi nào tới phần tử cuối cùng thì thôi.