Trang chủ Web DevelopmentPHP [PHP cơ bản] Hàm (function)

[PHP cơ bản] Hàm (function)

Bởi Thạch Phạm
1 bình luận 11,1K lượt xem
Bài này thuộc phần 10 của 15 phần trong serie PHP cho WordPress Developer

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.

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.

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').

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().


<?php
function tinh_tong()
{
    $x = 5;
    $y = 10;
    $total = $x + $y;
    echo $total;
}

tinh_tong(); // Gọi hàm
?>

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.


<?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
?>

Để 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.

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:


<?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 );
?>

Điều này có nghĩa là, bạn mặc định hàm tinh_tong() có hai tham số là $x$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$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àm get_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.

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();
?>

Ở đ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:


<?php
function phien_ban()
{
    global $wp_version;
    return $wp_version;
}
echo phien_ban();
?>

Và tương tự, các biến bạn khai báo trong hàm cũng chỉ có phạm vi sử dụng trong hàm đó, không có tác dụng ở bên ngoài nên khi tạo hàm bạn không cần phải lo lắng là tên biến có bị trùng hay không.

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.

Bài tập thực hành

Tạo một hàm tên bất kỳ và yêu cầu người dùng nhập năm sinh của họ vào. Sau đó trong hàm, bạn sẽ tính tuổi của người dùng dựa vào năm hiện tại và năm sinh nhập vào. Cuối cùng là hiển thị đoạn thông báo là “Đến năm XX. Bạn đã được XX tuổi.

Gợi ý: Để lấy năm hiện tại, sử dụng hàm date() trong PHP với tham số o (chuỗi).

Bài giải


<?php
function tinh_tuoi( $year )
{
    $current_year = date(‘o’); // Lấy năm hiện tại
    $age = $current_year – $year; // Tính tuổi

    echo "Đến năm $current_year. Bạn đã được $age tuổi.";

}
tinh_tuoi(1992);
?>

4.5/5 - (2 bình chọn)

Tham gia nhóm hỗ trợ WordPress

Tham gia nhóm Hỗ trợ Server - Hosting & WordPress để cùng nhau hỏi đáp và hỗ trợ các vấn đề về WordPress, tối ưu máy chủ/server.

Tham gia ngay
1 bình luận

Có thể bạn quan tâm

Hiện tại blog tạm đóng bình luận vì mình cần tập trung thời gian vào cập nhật bài viết. Bình luận sẽ mở ra cho đến khi mình sẵn sàng.