Cú pháp và kiến ​​thức cơ bản PHP

Bài này hướng dẫn bạn bắt đầu học ngôn ngữ lập trình PHP thông qua việc làm quen với cú pháp của nó. Qua bài viết bạn chắc chắn viết được 20 dòng code chỉ để làm mỗi việc chào thế giới. Để học hiệu quả, chúng tôi cho rằng bạn nên ngồi gõ phím lại lọc cọc hoặc từng chữ, dòng. Nếu bạn lười ngồi gõ phím, bạn có thể viết vô tập vở, bảng viết cũng tốt, cứ làm giống như viết chính tả hồi học tiểu học vậy.

Tiết mục chém gió/ ăn nói đạo lý

Việc chỉ ngồi xem lướt là tối kỵ. Chúng tôi dám nói 99,9% rằng bạn sẽ không tiết kiệm thời gian, khi dùng các công cụ tạo mã mà không phải gõ phím lóc cóc chỉ cho bạn ảo giác rằng bạn đang tiến bộ nhanh, học được nhiều thứ trong một thời gian ngắn. Một cảm giác thường được gọi là ảo tưởng sức mạnh.

Về lâu dài, điều đó rất có hại. Nếu không tin, bạn hãy chỉ cho chúng tôi có ai đó chỉ ngồi đọc sách, xem video clip về nấu ăn và trở thành đầu bếp? Có game thủ thực sự nào chỉ ngồi xem game thủ khác live stream? Có ca sĩ nào chỉ nghe người ta hát? Có lập trình viên nào không gõ phím?

Nói dông dài bạn khó mà “thông não” được, từ khóa cho bạn: Muscle Memory,

Túm lại, nếu bạn không chịu gõ phím, mà chỉ siêng copy & paste hoặc dùng công cụ sinh mã nhanh mà bạn không được đọc hiểu chậm rãi, tui dám nói bạn học lập trình một cái không có não, vô dụng.

Giới thiệu qua về cấu trúc của một file PHP

Mở trình soạn thảo lên và gõ:

<?php
echo 'Hello! I want to be a PHP developer';
?>

Một file PHP luôn bắt đầu bằng dấu nhỏ, dấu hỏi, cụm từ php và khi lưu file, cần đặt phần mở rộng (đuôi file) là .php

Tên file không nên (thực ra là “không được” chứa các ký tự khác a-z, A-Z, 0-9) chứa khoảng trắng, ký tự đặc biệt, tiếng Việt. Điều này không chỉ trong PHP mà ở bất cứ ngôn ngữ lập trình nào khác. Lý do: máy tính sẽ làm việc tốt hơn với những thứ có vẻ gì đó không “con người” cho lắm.

Minh họa 1 khối mã PHP
Một khối mã PHP. Trong 1 file PHP có thể có nhiều khối mã

Kiến thức đặt tên file thuộc về tin học căn bản, cần biết lúc nào nên đặt tên file như thế nào. Nhiều bạn cứ có thói quen đặt tên file có khoảng trắng, tiếng Việt có dấu,… và áp dụng cho mọi nơi, ngay cả sinh viên CNTT, điều đó cho thấy bạn ấy đang tự làm khó mình.

Kết thúc đóng của file PHP là dấu hỏi, đi liền ngay sau nó là dấu lớn để đóng khối mã lại. Nếu file PHP này được file PHP khác include hoặc require, bạn có thể bỏ đi phần đóng đoạn mã PHP.

Một khối mã PHP đơn giản
Một đoạn mã PHP của một file ngắn

Dòng 3 được gọi là một câu lệnh (hoăc phát biểu, statement). Một câu lệnh PHP được bắt đầu bằng một từ khóa (PHP keyword) và thường kết thúc với một dấu chấm phẩy.

Bất kỳ tập lệnh PHP nào cũng được xây dựng từ một loạt các câu lệnh. Một câu lệnh có thể là một phép gán, một lệnh gọi hàm, một vòng lặp, một câu lệnh có điều kiện hoặc thậm chí là một câu lệnh không làm gì cả (một câu lệnh rỗng). Các câu lệnh thường kết thúc bằng dấu chấm phẩy. Ngoài ra, các câu lệnh có thể được nhóm thành một nhóm câu lệnh bằng cách đóng gói một nhóm các câu lệnh bằng dấu ngoặc nhọn. Một nhóm câu lệnh cũng là một câu lệnh riêng lẻ. Các loại câu lệnh khác nhau được mô tả trong chương này.

Một hoặc nhiều dòng trống trong file PHP không có nội dung như dòng 2, dòng 5 ở trên chủ yếu là để tạo khoảng hở, giúp người lâp trình dễ đọc mã. Những dòng này không có tác dụng về cú pháp, ý nghĩa với trình thông dịch nên không ảnh hưởng gì đến việc trình biên dịch file PHP. Vì vậy, bạn có thể/ nên có các dòng trống trong quá trình viết mã để dễ đọc, code đẹp hơn khi viết code.

Mã PHP quan hệ thế nào với HTML?

Thuở ban đầu PHP được làm ra như là một templating language (không rõ tiếng Việt là gì, nhưng tạm hiểu đây là nó thành khuôn mẫu/ khung sườn để nhét cái gì đó vô) nên nó “nấu lẩu” chung với mã HTML.

Theo thời gian khi lập trình web phát triển, có những dự án phần mềm PHP với hàng chục ngàn dòng mã, các lập trình viên PHP đã tách rời HTML để dễ làm việc nhóm, bảo trì mã. Khi nào học đến lập trình hướng đối tượng trong PHP, học về mô hình MVC bạn sẽ viết PHP tách rời HTML.

Ở bài này, chúng ta hiểu rằng file PHP thực ra là một file HTML với đuôi file .php và trong đó có những khối mã PHP. Một ví dụ:

Mã PHP xen lẫn với HTML
Khối mã PHP trộn lẫn với HTML

Save lại file có nội dung trên với tên file bai1.php vào thư mục <Driver>:\xampp\htdocs rồi truy cập nó:

http://localhost/bai1.php

Trên màn hình của cửa sổ trình duyệt có kết quả:

Kết quả xuất ra của PHP
Mã PHP + HTML tạo ra được gọi là một trang web động

Phân tích đoạn mã, ta nhìn vào dòng 11:

echo '<h1>Bài 1: làm quen với cú pháp PHP</h1>';

Dòng này có chữ echo, đây là một language construct (cấu trúc ngôn ngữ) trong PHP, đi ngay phía sau echo là một chuỗi. Chuỗi luôn được bọc trong cặp dấu nháy.

Trong lập trình máy tính, cấu trúc ngôn ngữ là “một phần cú pháp được phép của một chương trình có thể được hình thành từ một hoặc nhiều mã thông báo từ vựng theo các quy tắc của ngôn ngữ lập trình”, theo định nghĩa trong tiêu chuẩn ISO/IEC 2382 (ISO/IEC JTC 1).

Khi bạn cần xuất một chuỗi ra (mặc định thông dụng là màn hình hoặc cửa sổ console) trong PHP thì dùng echo là cách thông dụng nhất.

Cú pháp đúng là từ echo, khoảng cách và sau đó là một chuỗi. Vậy, chuỗi là gì? Đây là một kiểu dữ liệu trong lập trình, thường gọi là kiểu String. Theo ngôn ngữ bình dân đời thường nó giống với một cụm từ/ một câu/ một đoạn văn khi bạn viết vậy.

Trong PHP, chuỗi có thể rất dài, kích thước lên đến 2GB, nên bạn yên tâm rằng bạn có thể xuất ra bất cứ chuỗi nào bạn thích mà không lo lắng nó quá dài khiến PHP bị treo.

Bạn có thể sử dụng dấu nháy đơn hoặc dấu nháy kép để bắt đầu và kết thúc chuỗi. Bắt đầu bằng dấu nháy nào thì kết thúc bằng dấu nháy đó.

echo "Đây là một chuỗi được viết bên trong cặp dấu nháy kép";
echo 'Chuỗi này được bọc bởi cặp dấu nháy đơn';

Chuỗi được viết bởi echo giống như nó được đưa vào mà không thêm/ bớt điều gì. Do đó, về mặt lý thuyết khi bạn viết 2 dòng liên tiếp nhau:

echo "Hôm nay trời nắng đẹp ";
echo "và có gió nhè nhẹ";

sẽ tương đương với bạn viết 1 dòng:

echo "Hôm nay trời nắng đẹp và có gió nhè nhẹ";

Lúc nào nên viết nhiều dòng, lúc nào một dòng khi mà không có sự khác biệt về tác dụng/ kết quả? Đó là bởi vì có phong cách viết mã của mỗi người cũng như làm việc nhóm/ dự án/ dùng mã nguồn framework có những quy định khác nhau. Độ rộng màn hình có giới hạn, nếu dòng mã dài, khuất bên phải kéo thanh trượt ngang, hoặc trình soạn thảo tự bẻ dòng gây khó đọc, rối rắm.

Chuỗi được bọc bởi dấu nháy đơn có thể bẻ ra nhiều dòng với một phát biểu echo mà không gây lỗi.

echo 'Dòng chữ này được bẻ ra làm nhiều dòng
      nhưng vẫn có thể chạy được ngon lành
      mà không bị báo lỗi bởi trình thông dịch PHP';

Trong khi đó, với chuỗi được bọc bằng dấu nháy kép, viết như đoạn trên sẽ gây báo lỗi ngay. Khi học đến kiểu String sẽ nói rõ hơn về lúc nào nên dùng dấu nháy nào.

Bạn có thể thay echo bằng print. Điểm khác nhau cơ bản đó là print chỉ có thể có một đối số mà thôi, nạp nhiều đối số sẽ báo lỗi và print luôn trả về 1, còn echo không trả gì về.

Biểu tượng cảnh báo

Cần phân biệt print với printf vì ngay cả một số người viết mã PHP lâu ngày vẫn lơ mơ vì thuở ban đầu họ học không đủ sâu, thiếu chú tâm.

print là cấu trúc ngôn ngữ giống echo, cách dùng khá giống echo, khác echo ở 2 điểm:

1) print luôn trả về giá trị 1, echo không trả về giá trị nào.

2) print không thể nạp nhiều đối số như echo

Để rõ hơn sự khác biệt, xem ví dụ sau:

Print chỉ có 1 đối số
echo chấp nhận nhiều đối số, print chỉ có thể có 1 đối số mà thôi

Trong khi đó, đoạn code sau đây sẽ khiến cho echo gặp báo lỗi, print thì không:

Không thể gán echo cho biến
Không thể gán echo cho biến vì nó không trả giá trị

Khi dùng print, viết theo cách đi kèm cặp dấu ngoặc tròn là không hiểu bài. Tức là:

print('Hoàng hôn yên tĩnh'); // cách viết sai, dù không báo lỗi khi chạy
print 'Mưa trên biển vắng'; // cách viết đúng, chuẩn chỉnh

print không phải hàm, ta không dùng cặp dấu tròn làm gì, cho dù không báo lỗi đi nữa. Vì dùng như vậy khiến ta lẫn lộn, khi đọc mã lại nghĩ nó là hàm.

Trong khi đó, printf là một hàm, nghĩa là luôn viết printf(‘Cái gì đó’). Tức là bạn không thể viết:

printf "Đây là chuỗi"; // báo lỗi syntax error
printf("Đây là chuỗi"); // cách viết đúng của hàm printf()

Điểm khác nhau của dùng dấu nháy đơn so với dấu nháy kép khi làm nên một chuỗi sẽ được thể hiện qua ví dụ sau:

Mã phân biệt dấu nháy PHP
Một chuỗi có kèm biến bên trong, chuỗi dấu nháy đơn không phân giải biến

Chạy đoạn mã trên, bạn sẽ thấy rõ được sự khác biệt giữa chuỗi dùng dấu nháy đơn so với chuỗi dùng dấu nháy kép ở chỗ khi có biến số (lát nữa sẽ đọc đến) được nhúng vào:

echo '<p>Hello $world!</p>'; // cho kết quả: Hello $world!
echo "<p>Hello $world!</p>"; // cho kết quả: Helllo Earth!

Nói cách khác, trình thông dịch PHP không hiểu biến số bên trong chuỗi dùng dấu nháy đơn nên hiện nguyên $world, trong khi dùng dấu nháy kép, sẽ thay giá trị của biến vào.

Chuỗi sử dụng dấu nháy kép cũng được dùng khi có escape character (ký tự đặc biệt để làm một việc gì đó khác với nghĩa thông thường). Sau đây là một số escape character thường gặp.

Ký tự escape character thường gặp trong PHP
Ghi chú, ghi nhớ

Nếu không xử lý gì đặc biệt, chỉ để xuất ra một chuỗi bình thường, bạn nên sử dụng dấu nháy đơn để đạt hiệu suất cao hơn do trình biên dịch PHP không phải “soi vào” xem có gì cần xử lý? Nếu có escapce character và/ hoặc có biến cần được phân giải (parse), bạn phải dùng chuỗi bọc với dấu nháy kép.

Một đoạn PHP dài hơn xem sao

Đoạn mã bên dưới hiển thị một lịch đơn giản của tháng hiện tại:

Comment là gì? Đừng hiểu comment này giống như bạn sử dụng mạng xã hội nhé. Ở đây phai hiểu là ghi chú thay vì bình luận, mặc dù có lúc ghi chú cũng có ý bình luận.

Khi viết mã, có những đoạn mã khá khó để hiểu, mọi ngôn ngữ lập trình, không riêng gì PHP có trang bị cơ chế comment để người viết mã ghi chú lại. Việc thực hiện comment thuòng nhằm 4 mục đích:

  1. Giúp dễ đọc: nhiều đoạn mã với thuật toán, xử lý nghiệp vụ phức tạp khó để hiểu được nếu không có comment.
  2. Giúp cộng tác: những dự án có nhiều người viết mã, comment giúp nhanh chóng có thể làm việc chung thay vì phải giải thích bằng họp hành, trao đổi.
  3. Giúp dễ bảo trì: khi đọc lại mã viết vài năm người ta nhanh chóng nắm bắt đoạn mã đó làm gì, dễ dàng tìm ra lỗi lập trình hoặc cần cải tiến.
  4. Thê hiện tài liệu kỹ thuật: việc có tài liệu để tham khảo rất quan trọng trong nhiều lĩnh vực, nhát là trong lĩnh vực khoa học kỹ thuật. Comment giúp ghi lại các chi tiết kỹ thuật liên quan đến phần mềm theo ngữ cảnh, tiện dụng mà tài liệu vết bên ngoài có thể khó diễn tả.
Lên đầu trang