2. • Khi lập trình trong WordPress (và có thể ở các CMS khác),
chúng ta sẽ sử dụng hàm rất nhiều nên ở đây mình xin nói rõ
về hàm cũng như các quy tắc bạn cần biết khi sử dụng hàm.
Trước hết, mình xin nói rõ rằng khi khai báo hàm, bạn có thể
khai báo nó vào tập tin functions.php trong theme rồi có thể
gọi nó trong một template bất kỳ như index.php chẳng hạn.
3. Hàm trong PHP là gì?
• Hàm nghĩa là một tập hợp các đoạn mã và nó sẽ thực thi các
đoạn mã đó khi gọi hàm ra, nó sẽ được thực thi lại nhiều lần
hoặc thực thi trong một trường hợp nhất định. Có nghĩa là khi
bạn tạo hàm thì các đoạn mã bên trong đó sẽ không thực thi
cho đến khi được gọi ra bên ngoài.
• Ví dụ, trong WordPress có rất nhiều hàm có sẵn để bạn làm
các việc gì đó mà không cần phải viết code nhiều. Hoặc trong
PHP cũng có nhiều hàm được định nghĩa sẵn để làm một số
việc, và bạn cũng có thể tự tạo hàm riêng cho mình.
4. Phân biệt hàm
• Khi nhìn vào một đoạn mã, nếu bạn thấy một từ khoá mà có
cặp dấu ngoặc đằng sau thì chính là hàm. Ví
dụ:get_the_title(), the_permalink(),…đều là hàm. Và đôi khi
trong hàm cũng có tham số như wp_nav_menu( $args
), get_posts( $args ). Tham số bên trong thường là người dùng
có thể đặt tên biến bất kỳ, hoặc viết bằng giá trị
như dynamic_sidebar('sidebar').
5. Cách tạo một hàm
• Để tạo một hàm, chúng ta khai báo bằng từ khoá function
tên_hàm() như sau:
• function tinh_tong()
• {
• // Code của hàm viết trong này
• }
• Trong đó, các đoạn mã của hàm phải được đặt trong cặp dấu
ngoặc nhọn ({}) của nó.
• Và sau đó, chúng ta có thể gọi hàm ra bằng cách viết tên hàm.
Ví dụ: tinh_tong().
7. Return và Echo trong hàm
• Khi làm việc với hàm, có thể bạn sẽ thấy rất nhiều từ
khoá return trong hàm. Bạn học PHP từ đầu tới giờ cũng biết từ
khoá echo là để hiển thị một cái gì đó. Nhưng khi sử dụng hàm,
bạn cần biết thêm một từ khoáreturn. Cũng giống như echo,
bạn có thể return các kiểu giá trị hoặc bất cứ cái gì.
Và return chỉ được sử dụng trong hàm.
8. • <?php
• function get_site_name()
• {
• $site_name = get_bloginfo( 'name' );
• return $site_name;
• }
• get_site_name(); // Không hiển thị gì cả
• var_dump( get_site_name() ); // Dump
• echo '<br/>';
• echo get_site_name(); // Phải echo ra mới hiển thị được giá trị được return
• ?>
9. • Để giải thích từ khoá return cho trọn vẹn cũng khó. Nhưng bạn có
thể hiểu, return nghĩa là bạn trả giá trị của hàm ra bên ngoài nhưng
sẽ không hiển thị ra, giống như giá trị của hàm đó đã được chuẩn bị
sẵn để sử dụng vậy. Khi return ra, bạn chỉ có thể thấy nó thông qua
việc echo hoặc var_dump nó. Và bạn cũng có thể sử dụng giá trị
được return để sử dụng với các toán tử hoặc các điều kiện rẽ
nhánh.
• Như vậy, bạn có thể tạm hiểu là nếu bạn echo giá trị trong hàm thì
giá trị sẽ được xuất ra màn hình. Còn nếu retun giá trị trong hàm thì
nó chỉ gửi dữ liệu về, bạn muốn xuất ra phải sử dụng return.
• Lưu ý là trong một hàm, bạn chỉ có thể return 1 lần duy nhất.
10. Hàm có tham số
• Một trong những tính năng hữu dụng nhất của hàm là bạn có
thể truyền tham số vào trong giá trị của hàm. Ví dụ như bạn tạo
một hàm tính tổng, cho phép tính tổng của hai số mà người
dùng nhập vào thì bạn sẽ cần sử dụng tham số, sau đó truyền
giá trị của tham số vào bên trong hàm để nó xử lý rồi trả về kết
quả.
• Để khai báo tham số trong hàm, bạn sẽ viết thêm các biến vào
phần tên hàm như sau:
11. • <?php
• function tinh_tong( $x, $y )
• {
• $total = $x + $y;
• return $total;
• }
•
• // Gọi hàm ra kèm giá trị tham số
• echo tinh_tong( 5,15 );
• ?>
12. • Điều này có nghĩa là, bạn mặc định hàm tinh_tong() có hai tham số là $x và $y theo thứ
tự giá trị đứng trước là x, đứng sau là y. Sau đó trong nội dung của hàm, chúng ta có
hàm $total là tổng của $x và $. Cuối cùng là trả về biến $total để in kết quả.
• Như bạn thấy hàm đó chúng ta không gán giá trị cho $x và $y mà việc gán giá trị sẽ được
làm khi gọi hàm ra. Khi gọi ra, chúng ta viết hai tham số vào hàm và hai giá trị tham số
này sẽ có thứ tự giống như bạn đã thiết lập khi tạo hàm, tức là giá trị đứng trước là $x,
đứng sau là $y. Và trong ví dụ, tinh_tong(5,15) nghĩa là ta khai báo $x = 5, $y = 15 vào
trong hàm để nó thực thi.
• Nói qua một xíu về WordPress, như bạn thấy từ các bài trước cho đến bài này mình sử
dụng hàmget_bloginfo() rất nhiều để lấy ra thông tin của website. Và đôi khi bạn thấy
mình có viết tham số vào hàm này như get_bloginfo('name'), get_bloginfo('url'). Và các
tham số đó chính là tham số dạng chuỗi trong hàm get_bloginfo(). Nếu bạn xem code tạo
hàm này trong tập tin /wp-includes/general-template.php sẽ thấy nó cũng khai báo hai
tham số vào hàm này để người dùng truyền vào khi sử dụng.
• Tips: Khi đọc tra cứu code tạo codex.wordpress.org, hãy kéo xuống cuối trang để biết
code đó được tạo ra ở tập tin nào trong mã nguồn.
13. Phạm vi biến của hàm
• Khi sử dụng hàm, đôi khi chúng ta cần đưa một biến nào đó mà
bạn đã khai báo trong code vào trong hàm để sử dụng lại. Ví dụ
• <?php
• function phien_ban()
• {
• return $wp_version;
• }
• echo phien_ban();
• ?>
14. • Ở đoạn trên, mình đưa biến $wp_version vào hàm phien_ban(). Do mình đang
viết code trong theme WordPress nên mình muốn sử dụng các biến có sẵn của
WordPress, cụ thể biến $wp_version để in phiên bản của mã nguồn WordPress
trên website.
• Thế nhưng nếu bạn xem kết quả, bạn sẽ thấy lỗi là “Notice: Undefined variable:
wp_version in /xxx/wp-content/themes/hoc-php/index.php on line 4“. Nghĩa là nó
báo lỗi có một biến không xác định tên wp_version ở dòng số 4 trong cái tập tin
kia. Nhưng đây là biến có sẵn của WordPress mà, tại sao lại không xác định?
• Ở đây, bạn phải hiểu rằng biến $wp_version chỉ được khai báo ở một tập tin nào
đó trong mã nguồn và bạn chỉ có thể sử dụng nó bên ngoài một hàm. Khi đưa
biến vào hàm, PHP tự hiểu rằng cái biến đó là một biến riêng của hàm được khai
báo.
• Vậy làm sao có thể sử dụng biến có sẵn như $wp_version trong hàm của chúng
ta? Đó là chúng ta sẽ cần khai báo thêm từ khoá global vào tên biến cần sử dụng
lại trong hàm như sau:
15. Lời kết
• Đây là một trong các bài quan trọng nhất trong PHP nói chung
và lập trình WordPress nói riêng vì hàm có rất bổ ích sau này
khi bạn viết code, nó sẽ giúp bạn xử lý các tác vụ trong code tốt
hơn cũng như có thể viết một hàm để làm một công việc mang
tính chất lặp đi lặp lại. Nên mình mong bài này có thể đã giúp
bạn hiểu qua rất rõ về khái niệm hàm trong PHP.