Mình bắt đầu học cách lập trình vào vài năm trước với HTML, CSS và JavaScript. Kể từ khi bắt đầu, PHP đã luôn là ngôn ngữ mình muốn học.
Cũng khá khó để nhảy vào HỌC LẬP TRÌNH PHP nếu bạn chưa bao giờ chạm vào dòng code nào trước đây. Nhưng nếu bạn đã học JavaScript cơ bản rồi thì lại khác.
> Note: Nếu đang làm về JavaScript thì càng dễ
Vì vậy, đó là lý do tại sao mình viết bài PHP dành cho JavaScript Developer này. Mình muốn có thể giúp những người khác giống như mình, những người chỉ cần tìm hiểu nhanh về PHP.
1. Cú pháp cơ bản của PHP
Một trong những điểm khác biệt lớn nhất giữa cú pháp của PHP và JavaScript là dấu chấm phẩy ;
là bắt buộc ở cuối câu lệnh PHP.
Lúc đầu, dùng JS mình không quan tâm lắm nên khi dùng PHP có đôi lúc cũng quên. Vì thế, đây là thứ mà mình muốn nhắc bạn đầu tiên.
Đừng quên ;
Sử dụng PHP
Trong JavaScript, bạn chỉ cần lưu tệp với đuôi .js
là có thể chạy code. Tuy nhiên, trong PHP, bạn cần sử dụng các thẻ <?php ?>
, ngay cả trong một tệp đã được lưu với đuôi là .php
<?php
// Code PHP của bạn ở đây
?>
> Lưu ý: Mặc dù bạn có thể viết ?>
ở cuối file PHP nhưng phải bỏ đi ở các tệp chỉ chứa PHP: https://www.php-fig.org/psr/psr-12/
Khai báo biến trong PHP
Tạo một biến trong PHP rất đơn giản. Giống như JavaScript, PHP là một ngôn ngữ kiểu dynamic và do đó, bạn không phải khai báo kiểu dữ liệu của biến.
Nhưng lưu ý, luôn sử dụng ký hiệu $
ở đầu để biểu thị các biến.
// Luôn sử dụng ký hiệu $ ở đầu
// để tạo biến trong PHP
$bienA = "Học PHP";
Theo mặc định trong PHP, bất kỳ biến nào bạn khai báo đều có thể thay đổi được. Nó có thể được thay đổi hoàn toàn ở bất cứ đâu.
Khai báo hằng số trong PHP
PHP có một hàm đặc biệt được gọi là define()
được sử dụng để tạo cụ thể các biến không thể thay đổi (Hằng số).
Tên hằng số hợp lệ bắt đầu bằng một chữ cái hoặc dấu gạch dưới _
(không có dấu $
trước tên hằng).
> Lưu ý: Không giống như các biến, hằng số tự động là toàn cục.
Hàm define()
cần 3 đối số:
-
Và giá trị bạn muốn gán cho nó.
-
Phân biệt chữ hoa chữ thường
Theo mặc định (false
), biến này cũng phân biệt chữ hoa chữ thường.
// Khai báo hằng số
define('DOMAIN_NAME', "niithanoi.edu.vn");
echo DOMAIN_NAME; // niithanoi.edu.vn
Bạn có thể khiến nó không phân biệt chữ hoa chữ thường bằng cách truyền true
làm đối số thứ 3.
// Khai báo hằng số
// true: Không phân biệt HOA thường
// Mặc định false: Có phân biệt HOA thường
define('DOMAIN_NAME', "niithanoi.edu.vn", true);
echo domain_name; // niithanoi.edu.vn
Khai báo mảng PHP
Giống như mảng trong JavaScript, mảng PHP có thể được tạo bằng ký hiệu dấu ngoặc [ ]
hoặc bằng một hàm trong PHP.
// Khai báo mảng trong PHP
$mangPHP = [1, 2, 3, 4];
Mảng kết hợp của PHP tương đương với một Đối tượng JavaScript và là một cách để tạo một tập hợp các cặp key / value trong PHP mà không cần import một module nào đó.
Việc gán giá trị cho một khóa trong PHP được ký hiệu là =>
// Khai báo mảng kết hợp trong PHP
$mangPHP = ['key1' => 'value1', 'key2' => 'value2'];
Hàm trong PHP
Các hàm trong PHP rất giống với JavaScript (ES5).
// Khai báo hàm trong PHP
function hamPHP($thamSo) {
return $thamSo;
}
Sự khác biệt thực sự duy nhất mà mình có thể tìm thấy giữa hai ngôn ngữ về vấn đề này là PHP có một toán tử: &
Nó là được sử dụng như thế này:
// Khai báo biến
$bienA = 10;
// Xem giá trị của $bienA
echo $bienA; # Kết quả: 10
// Hàm cộng 10
function cong10(&$thamSo) {
return $thamSo += 10;
}
// Gọi hàm
cong10($bienA);
// Xem lại giá trị của $bienA
echo $bienA; # Kết quả: 20
Như vậy, bạn thấy đó. Sự thay đổi trong hàm cong10
có tác động thay đổi biến ở ngoài hàm.
Ngược lại, nếu bạn không sử dụng &$thamSo
mà sử dụng $thamSo
thì sự thay đổi của $bienA
trong hàm cong10
không làm thay đổi $bienA
ở ngoài hàm.
Vòng lặp trong PHP
Giống như hàm, các vòng lặp trong PHP không khác nhiều so với cách chúng được viết bằng JavaScript.
Một ngoại lệ là vòng lặp foreach của PHP thay đổi dựa trên loại mảng mà bạn đang cố gắng lặp lại.
Mảng bình thường:
// Lặp qua mảng thông thường
foreach($tenMang as $bienDaiDien) {
// Code của bạn
}
Đối với mảng kết hợp:
// Lặp qua mảng kết hợp
foreach($tenMang as $khoa => $giaTri) {
// Code của bạn
}
2. Class và OOP trong PHP
Khái niệm class trong PHP khác với JavaScript khá nhiều.
Mặc dù PHP không khởi đầu như một Ngôn ngữ lập trình hướng đối tượng. Nó tương tự như JavaScript — tính năng hướng đối tượng (OOP) này đã được thêm vào từ phiên bản PHP 5.
Chỉ định mức độ truy cập (Access Modifier)
Trong JS chuẩn, các từ khóa bổ trợ chỉ định mức độ truy cập là không cần thiết cho các class. Đối với PHP, nó cũng không bắt buộc.
Các Modifier mà bạn có trong PHP là:
-
public
: Khi chúng ta xác định các thành viên của class là public, thì chúng có thể truy cập từ mọi nơi, ngay cả từ bên ngoài phạm vi class.
-
private
: Khi chúng ta định nghĩa các thành viên của lớp là private, chúng chỉ có thể được truy cập từ bên trong chính class đó.
-
protected
: Cũng giống như private, với một ngoại lệ, các thành viên của class được định nghĩa là protected vẫn có thể được truy cập từ lớp con của nó (Nếu nó được kế thừa kế thừa).
-
abstract
: Từ khóa này chỉ được sử dụng cho các class PHP và các hàm thành viên của nó để đạt được sự trừu tượng.
-
final
: Các phương thức của class được định nghĩa là final là không thể thay đổi hoặc ghi đè bởi bất kỳ lớp con nào.
Mặc dù nó là không bắt buộc, nhưng khi tạo một class trong PHP, tốt nhất là sử dụng các từ khóa này để cho class biết nó cần làm gì với các thuộc tính và phương thức của nó.
class SinhVien {
private $ten;
public function __construct($ten) {
$this -> ten = $ten;
}
}
Bạn sẽ nhận thấy một vài điều trong đoạn code trên.
Đầu tiên có lẽ sẽ là hai từ khóa bổ trợ private
và public
.
Ở đây, chúng ta đang khai báo một biến private
được gọi là $ten
sẽ chỉ có thể truy cập được qua SinhVien
.
Thứ hai, là từ khóa public
mà chúng ta đang sử dụng cùng với phương thức __construct
được tích hợp sẵn của PHP.
Điều này cho phép chúng ta khởi tạo một class như thể nó là một hàm, giống như chúng ta làm trong JavaScript.
$sinhVienA = new SinhVien("Ngọc Anh");
This và Arrow
Tiếp tục với ví dụ SinhVien
ở trên, bạn sẽ nhận thấy rằng chúng ta đang sử dụng giống như cách chúng ta sử dụng trong JavaScript.
Sự khác biệt ở đây là chúng tôi đang sử dụng một mũi tên ->
để truy cập ten
trên class.
class SinhVien {
public $ten;
public function __constructor($ten) {
$this->ten = $ten;
}
}
Chúng ta cũng sẽ sử dụng con trỏ ->
này để truy cập bất kỳ thứ gì trên class mà chúng tôi cần sử dụng trong toàn bộ code của mình.
Còn đây là một class trong JavaScript:
class SinhVien {
constructor(ten) {
this.ten = ten;
}
}
Getter và Setter trong PHP
Getters và Setters là các phương thức của class được sử dụng để lấy và thiết lập (hoặc cập nhật) giá trị của các thuộc tính trong class.
Trong JavaScript, chúng ta thường không cần tạo chúng và tương tự như vậy, chúng không bắt buộc trong PHP.
Nhưng bạn sẽ thấy chúng thường xuyên trong PHP, vì vậy mình nghĩ rằng bạn cần xem xét chỗ này kỹ hơn.
Về cơ bản, chúng ta đang cố hạn chế việc sửa đổi / lấy dữ liệu từ bên ngoài theo cách thức không được phép.
Chúng ta chỉ cho phép lấy và sửa đổi dữ liệu theo cách chúng ta muốn.
class SinhVien {
private $ten;
public function __construct($ten) {
$this->ten = $ten;
}
// Phương thức getter
public function get_ten() {
return $this->ten;
}
// Phương thức setter
public function set_ten($ten) {
$this->ten = $ten;
}
}
$sinhVienA = new SinhVien("Ngọc Anh");
echo $sinhVienA->get_ten(); // Ngọc Anh
> Lưu ý: Thực sự thì setters không cần thiết trong PHP.
Kế thừa trong PHP
Kế thừa trong PHP là khi một lớp dẫn xuất từ một lớp khác.
Lớp con sẽ kế thừa tất cả các thuộc tính và phương thức public
và protected
từ lớp cha. Ngoài ra, nó có thể có các thuộc tính và phương thức private
.
Một lớp kế thừa được xác định bằng cách sử dụng từ khóa extends
.
Hãy xem một ví dụ:
class SinhVien {
private $ten;
public $tuoi;
// Hàm khởi tạo
public function __construct($ten, $tuoi) {
$this->ten = $ten;
$this->tuoi = $tuoi;
}
// Phương thức
public function thongTin() {
echo "Sinh viên {$this->ten} hiện {$this->tuoi} tuổi.";
}
}
// Class SinhVienNam 1 kế thừa (mở rộng) Class SinhVien
class SinhVienNam1 extends SinhVien {
public function thongBao() {
echo "Chào thanh xuân!";
}
}
// Khởi tạo đối tượng mới
$sinhVienNam1 = new SinhVienNam1("Ngọc Anh", 18);
// Gọi phương thức của lớp cha
$sinhVienNam1->thongTin();
echo "<br />";
// Gọi phương thức của lớp con
$sinhVienNam1->thongBao();
Kết quả ta được:
Sinh viên Ngọc Anh hiện 18 tuổi.
Chào thanh xuân!
Như bạn thấy, trong class SinhVienNam1
không có khai báo hàm khởi tạo, biến, phương thức gì cả nhưng vẫn gọi được. Đó là vì nó đã kế thừa toàn bộ từ class SinhVien
Và trong class SinhVienNam1
chúng ta tạo thêm một phương thức thongBao()
của riêng nó.
Bây giờ, chúng ta thử thay đổi phương thức thongTin() thành protected và thử gọi nó ở bên ngoài class thử xem.
class SinhVien {
private $ten;
public $tuoi;
// Hàm khởi tạo
public function __construct($ten, $tuoi) {
$this->ten = $ten;
$this->tuoi = $tuoi;
}
// Phương thức
protected function thongTin() {
echo "Sinh viên {$this->ten} hiện {$this->tuoi} tuổi.";
}
}
// Class SinhVienNam 1 kế thừa (mở rộng) Class SinhVien
class SinhVienNam1 extends SinhVien {
public function thongBao() {
echo "Chào thanh xuân!";
}
}
// Khởi tạo đối tượng mới
$sinhVienNam1 = new SinhVienNam1("Ngọc Anh", 18);
// Gọi phương thức của lớp con
$sinhVienNam1->thongBao();
echo "<br />";
// Gọi phương thức protected của lớp cha
$sinhVienNam1->thongTin();
Kết quả:
Chào thanh xuân!
Như vậy, chúng ta không thể gọi phương thức protected
từ bên ngoài class dẫn xuất.
Còn bây giờ, thử gọi phương thức protected
bên trong class dẫn xuất như bên dưới xem sao nhé:
class SinhVien {
private $ten;
public $tuoi;
// Hàm khởi tạo
public function __construct($ten, $tuoi) {
$this->ten = $ten;
$this->tuoi = $tuoi;
}
// Phương thức
protected function thongTin() {
echo "Sinh viên {$this->ten} hiện {$this->tuoi} tuổi.";
}
}
// Class SinhVienNam 1 kế thừa (mở rộng) Class SinhVien
class SinhVienNam1 extends SinhVien {
public function thongBao() {
$this->thongTin();
echo "<br />";
echo "Chào thanh xuân!";
}
}
// Khởi tạo đối tượng mới
$sinhVienNam1 = new SinhVienNam1("Ngọc Anh", 18);
// Gọi phương thức của lớp con
$sinhVienNam1->thongBao();
Kết quả:
Sinh viên Ngọc Anh hiện 18 tuổi.
Chào thanh xuân!
Chúng ta cũng có thể ghi đè phương thức.
class SinhVien {
private $ten;
private $tuoi;
// Hàm khởi tạo
public function __construct($ten, $tuoi) {
$this->ten = $ten;
$this->tuoi = $tuoi;
}
// Phương thức
public function thongTin() {
echo "Sinh viên {$this->ten} hiện {$this->tuoi} tuổi.";
}
}
// Class SinhVienNam1
class SinhVienNam1 extends SinhVien {
private $canNang;
// Ghi đè phương thức constructor
public function __construct($ten, $tuoi, $canNang) {
$this->ten = $ten;
$this->tuoi = $tuoi;
$this->canNang = $canNang;
}
// Ghi đè phương thức
public function thongTin() {
echo "{$this->ten} hiện {$this->tuoi} tuổi.";
echo "<br />";
echo "{$this->canNang} kg";
}
}
// Khởi tạo đối tượng mới
$sinhVienNam1 = new SinhVienNam1("Ngọc Anh", 18, 80);
// Gọi phương thức của lớp con
$sinhVienNam1->thongTin();
Kết quả:
Ngọc Anh hiện 18 tuổi.
80 kg
Phương thức Static
Trong PHP, phương thức stactic có thể gọi trực tiếp
class SinhVien {
public static function phuongThucStatic() {
echo "Xin chào!";
}
}
SinhVien::phuongThucStatic(); // Xin chào!
Ngoài ra, trong class, chúng ta có thể có phương thức stactic và phương thức non-static. Để truy cập phương thức static ở trong class chúng ta sử dụng từ khóa self
và dấu 2 chấm ::
Ví dụ:
class SinhVien {
public static function phuongThucStatic() {
echo "Xin chào!";
}
public function __construct() {
self::phuongThucStatic();
}
}
new SinhVien(); // Xin chào!
Tổng kết
Như vậy là mình đã giới thiệu qua về PHP cho JavaScript Developer. Cũng đơn giản thôi phải không?
PHP vốn đã là một ngôn ngữ dễ học, nếu bạn đã quen với JavaScript rồi thì càng dễ học PHP nữa (Sẽ có đôi chút khác nhau nhưng không vấn đề gì).
Thế nên, hãy tự tin mở rộng kiến thức của mình.
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0968051561
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python