Chủ đề nổi bật

Bài 11: Xây dựng hàm trong php

Hàm là một chương trình thực hiện một tác vụ cụ thể, chúng thực chất là những đoạn chương trình nhỏ giúp giải quyết một vấn đề lớn. Hàm là một ...

Hàm là một chương trình thực hiện một tác vụ cụ thể, chúng thực chất là những đoạn chương trình nhỏ giúp giải quyết một vấn đề lớn. Hàm là một phương pháp lập trình hướng thủ tục trong ngôn ngữ PHP và các ngôn ngữ bậc cao khác, hiểu được nó các bạn mới có thể tiếp tục học những kiến thức như lập trình đối tượng, vì thế tôi hy vọng các bạn cố nắm vững nó nhé.

Trong bài này chúng ta sẽ tìm hiểu các nội dung sau:

  • Cách sử dụng hàm (xem thêm tại php.net)
  • Cấu trúc của một hàm
  • Các cách gọi hàm (gọi bằng giá trị và tham chiếu)
  • Các quy tắc và phạm vi của hàm

1. Cách sử dụng hàm trong PHP

Hàm trong PHP dùng để thực hiện một khối lệnh liên tiếp có điểm đầu và điểm cuối. Một hàm được xác định thực hiện một công việc cụ thể nào đó, giả sử tôi viết một hàm kiểm tra số chẵn hay số lẻ thì mục đích của hàm đó là kiểm tra một số là số chẵn hay lẻ. Điều đặc biệt hàm có thể gọi ở nhiều nơi, nhiều chương trình khác nhau.

Giả sử bạn cần viết một chương trình cho người dùng đăng nhập vào hệ thống và bạn sẽ sử dụng nó ở hai ứng dụng backend và frontend. Nhưng sau một thời gian bạn muốn sửa lại một số thông tin lúc kiểm tra thì bạn sẽ phải vào hai chương trình đó và sửa lại, điều này thật tệ hại vì chương trình sẽ bị dư thừa, khó quản lý và bảo trì. Nhưng nếu bạn sử dụng hàm thì chỉ cần sửa trong hàm đó là được.

2. Cấu trúc của một hàm Trong PHP

BẢNG MÃ KÍCH HOẠT KHÓA HỌC RẤT RẺ

Mình đã sưu tầm các mã giám giá rất rẻ và đăng nó ơ trong bài viết này, bạn hãy vào tham khảo để xem cần kháo nào thì hãy chọn cho riêng mình nhé, Lưu ý la chỉ có tại code24h.com, bạn sẽ không thể tìm thấy ở chỗ khác.

Xem Ngay

Cú pháp tổng quát khai báo hàm trong PHP là:

function func_name($vars)
{
    // các đoạn code
    return $val;
}

Trong đó:

func_name là tên của hàm, $vars là các biến sẽ truyền vào trong hàm, return $val là hàm sẽ trả về giá trị $val. Nếu hàm không có trả về giá trị nào thì ta không có dòng return này.

Ví dụ:

// Số cần kiểm tra
$number = 12;
 
// gọi đến hàm kiem_tra_so_chan và truyền biến cần kiểm tra vào
// vì hàm kiem_tra_so_chan trả về true/false nên ta có thể đặt nó trong câu điều
// kiện if như thế này
if (kiem_tra_so_chan($number)){
    echo 'Số chẵn';
}
else{
    echo 'Số lẽ';
}
 
// Hàm kiểm tra số chẵn sẽ trả về true nếu $number là số chẵn và ngược lại.
// biến $number gọi là biến truyền vào hàm, đó chính là biến cần kiểm tra
function kiem_tra_so_chan($number)
{
    if ($number % 2 == 0)
        return true;
    else return false;
}

Hàm kiem_tra_so_chan có nhiệm vụ kiểm tra một số là số chẵn hay số lẻ, nếu số chẵn thì trả về true, ngược lại trả về false. Muốn kiểm tra số nào thì ta truyền biến đó vào và đó chính là biến $number. Trong chương trình chính sẽ gọi đến hàm kiem_tra_so_chan và kiểm tra hàm này trả về true hoặc false, nếu true thì xuất ra màn hình "số chẵn", ngược lại xuất ra màn hình 'số lẻ'.

Hàm kiem_tra_so_chan gọi là hàm có kết quả trả về vì trong thân hàm có return. Nếu bạn muốn hàm kiem_tra_so_chan không trả về giá trị mà xuất ra màn hình luôn, tức là trong chương trình chính chỉ cần gọi tới và truyền biến vào là xong. Ta làm như sau:

// Số cần kiểm tra
$number = 12;
 
// gọi đến hàm kiem_tra_so_chan và truyền biến cần kiểm tra vào
kiem_tra_so_chan($number);
 
// Hàm này có nhiệm vụ xuất ra màn hinh số chẵn nếu biến truyền vào ($number)
// là Số chẵn, và ngược lại sẽ xuất ra màn hình là Số lẽ
function kiem_tra_so_chan($number)
{
    if ($number % 2 == 0)
    {
        echo 'Số chẵn';
    }
    else {
        echo 'Số lẽ';
    }
}

Đọc đến đây các bạn có thắc mắc là tại sao hàm trong php lại để ở dưới cùng mà các dòng lệnh ở trên vẫn hiểu, vì theo nguyên tắc trình biên dịch dịch từ trên xuống và từ trái qua phải. Đó là vì hàm trong php có thể để bất cứ đâu trên 1 file thì các bạn có thể gọi đến thoải mái trong file đó.

Truyền nhiều biến vào hàm trong php

Các biến truyền vào hàm trong php có thể là các kiểu bất kỳ (tham khảo trong bài các kiểu dữ liệu trong php). Và số biến truyền vào là không giới hạn, như ví dụ trên thì chỉ có 1 biến truyền vào là $number, nhưng thực tế bạn có thể truyền nhiều biến vào bằng cách mỗi biến cách nhau bởi dấu phẩy.

Ví dụ:

function tinhtong($a, $b)
{
    return $a + $b;
}

Hàm này sẽ tính tổng của 2 biến truyền vào, các biến cách nhau bởi dấu phẩy. Như vậy trong chương trình chính mình sẽ làm như sau:

$so1 = 12;
$so2 = 13;
 
echo tinhtong($so1, $so2);
 
function tinhtong($a, $b)
{
    return $a + $b;
}

Tôi cố ý đặt tên là $so1 và $so2 để nó không trùng với tên biến trong hàm tính tổng, mục đích là để các bạn không hiểu nhầm rằng các biến truyền vào hàm phải cùng tên với các biến ở chương trình chính.

Gán giá trị mặc định cho biến truyền vào

Nếu một hàm trong php bạn khai báo có 2 biến truyền vào mà lúc sử dụng bạn chỉ truyền có 1 biến vào thì hệ thống sẽ báo lỗi ngay. Trong thực tế bạn muốn có những hàm không ràng buộc phải bắt buộc truyền đủ biến vào, vì thế nó cũng cấp cho chúng ta một chức năng là truyền giá trị mặc định cho biến trong các hàm, mời các bạn tham khảo ví dụ sau:

$so1 = 12;
$so2 = 13;
 
// chỉ truyền 2 đối số vào
echo tinhtong($so1, $so2);
 
// $c có một giá trị mặc định
// hàm này tính tổng của 3 số
function tinhtong($a, $b, $c = false)
{
    $tong = $a + b;
    if ($c != false){ // nếu $c được truyền vào (vì false là giá trị mặc định)
        $tong = $tong + $c; // thì thực hiện cộng thêm $c
    }
    return $tong;
}

Bạn thấy hàm tính tổng có 3 đối số truyền vào, trong đó có một đối số $c mình gán = false, đây chính la giá trị mặc định của đối số truyền vào $c. Hàm tinhtong có nhiệm vụ tính tổng cả 3 số, nếu $c không truyền vào thì chỉ tính tổng của 2 số thôi

Tham số thực và tham số hình thức

Các biến ta định nghĩa trong hàm gọi là tham số hình thức, còn biến mà ta truyền vào ở chương trình chính gọi là tham số thực.

// Chuong trinh chinh
$so = 12;
$flag = kiem_tra_so_nguyen_to($so);
 
// ham kiem tra so nguyen to
function kiem_tra_so_nguyen_to($number)
{
  // code
}

Tham số $number trong hàm kiem_tra_so_nguyen_to gọi là tham số hình thức, biến $so trong chương trình chính gọi là tham số thực.

Biến toàn cục và biến cục bộ

Định nghĩa này không có gì lạ đối với các ngôn ngữ như c, c++, đối với PHP thì cách dùng nó hơi khác so với các ngôn ngữ này. Biến toàn cục chính là các biến ta khai báo ở chương trình chính, còn biến cục bộ là biến ta khai báo ở các hàm.

Ví dụ:

// 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;
    }
}

Nhìn các ghi chú các bạn cũng hiểu rồi đúng không nào. Trong php để lấy giá trị biến toàn cục ta dùng lệnh global $tenbien để lấy. Trong các Framwork thì điều này ít sử dụng nhưng với các CMS như Wordpress thì rất hay sử dụng lệnh này để gọi biến toàn cục.

Biến tĩnh

Biến tĩnh là các biến cố định bên trong các hàm, không giống như các biến toàn cục chúng không được biết đến bên ngoài hàm tức là chỉ biết đến bên trong hàm nhưng giá trị của chúng sẽ lưu lại sau mỗi lần gọi hàm. Để khai báo là một biến tĩnh ta dùng từ khóa static $tenbien;.

Ví dụ:

// ham kiem tra
function kiem_tra()
{
    // bien tinh
    static $a = 0;
    $a++;
    echo $a;
}
 
kiem_tra();
kiem_tra();

Chạy đoạn code này màn hình sẽ xuất hiện giá trị 1 và 2 bởi vì lần gọi hàm thứ nhất biến $a được tăng lên 1 và xuất ra màn hình 1. Vì $a là biến tĩnh nên nó được lưu lại trong vùng nhớ. Qua lần gọi hàm thứ 2 biến $a được tăng lên 1 nữa là 2 nên xuất ra màn hình là 2, và đương nhiên giá trị 2 được lưu lại trong vùng nhớ cho các lần gọi tiếp theo.

3. Các cách gọi hàm trong PHP

Chúng ta có hai cách gọi hàm thông dụng.

Truyền bằng giá trị:

Mặc định tất cả các đối số truyền vào hàm đều là truyền bằng giá trị. Điều này có nghĩa là khi các đối số được truyền đến hàm được gọi, giá trị được truyền thông qua các biến tạm (tham số hình thức). mọi thao tác chỉ thực hiện trên biến tạm này nên nó không hề tác động đến biến chính của mình. Điều này có nghĩa là nếu truyền bằng giá trị thì trong hàm nếu ta tác động đến giá trị biến truyền vào thì sau khi thoát khỏi hàm giá trị đó không thay đổi.

Ví dụ:

// Biến
$a = 1;
 
// Hàm tăng giá trị tham số truyền vào lên 1
function tang_len_1($a)
{
    return $a + 1;
}
 
// Xuất giá trị trả về của hàm
echo tang_len_1($a);
 
// Xuất giá trị của biến
echo $a;

Kết quả xuất ra màn hình sẽ là 2 và 1. Như thế biến $a vẫn giữ nguyên giá trị bằng 1 sau khi hàm kết thúc. Còn trong hàm thì biến $a có giá trị là 2.

Truyền bằng tham chiếu:

Khi các đối số được truyền bằng giá trị thì giá trị của các đối số của hàm đang gọi không bị thay đổi. Tuy nhiên đôi khi bạn muốn những giá trị đó thay đổi theo thì lúc này bạn phải truyền biến vào hàm dạng tham chiếu.

Ví dụ:

// Biến
 $a = 1;
 
// Hàm tăng giá trị tham số truyền vào lên 1
 function tang_len_1(&$a)
 {
    $a = $a + 1;
     return $a; 
 }
 
// Xuất giá trị trả về của hàm
 echo tang_len_1($a);
 
// Xuất giá trị của biến
 echo $a;

Kết quả xuất ra màn hình là 2 và 2. như vậy biến $a đã bị thay đổi.

Sự khác biệt ở đoạn code này so với đoạn code trên là biến $a ở hàm tang_len_1 có dấu &, đây chính là cú pháp trong PHP báo cho trình biên dịch biết đó là một biến ở dạng tham chiếu.

4. Các quy tắc và phạm vi của hàm

Một hàm có thể gọi tới một hàm, tức là trong phần thân của hàm A có thể gọi đến hàm B, và trong thân hàm B có thể gọi đến hàm C. Đây chính là hàm gọi hàm.

Ví dụ:

// Danh sách các hàm
function A()
{
    B();
}
 
function B()
{
    C();
}
 
function C()
{
    echo 'C';
}
 
// Chương trình chính gọi đến hàm A
A(); // Kết quả xuất ra màn hình là 'C'

Bạn có thấy sự thú vị không. tôi thì thấy hơi bị căng vì phải suy nghĩ từng dòng code thế này :D. Bạn cứ chạy code theo quy tắc từ trên xuống và từ trái qua phải, febug từng dòng là sẽ ra được kêt quả. Nếu bạn làm quen thì sau này bạn sẽ quản lý được code của mình đó.

Thường thì người ta viết các hàm vào một file php riêng, và chương trình chính vào một file PHP riêng, và trong chương trình chính muốn sử dụng hàm nào thì gọi hàm đó vào. Vấn đề này tôi sẽ nói đến trong một bài khác nhé.

5. Lời kết

Trong bài học này các bạn đã được thao tác với Hàm trong php, một định nghĩa trong lập trình cấu trúc và cũng là một bước ngoặc để các bạn có thể học sang lập trình hướng đối tượng, vì thế hãy nắm vững nó trước khi qua các bài sau nhé. Bài tiếp theo chúng ta sẽ tìm hiểu  giải thuật đệ quy trong php.

BÀI KẾ SAU
BÀI KẾ TIẾP

Nguồn: code24h.com

Bài liên quan
Mới nhất

Danh sách các múi giờ (Timezones) trong PHP

- Múi giờ (timezones) thường được sử dụng trong các hàm xử lý ngày tháng & thời gian. - Dưới đây là danh sách đầy đủ các múi giờ được hỗ trợ trong ngôn ngữ lập trình PHP. 1) Africa Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers 2) America ...

Các hàm dùng để quản lý thư mục trong PHP

Hàm Mô tả chức năng chdir() chroot() closedir() dir() getcwd() opendir() readdir() rewinddir() scandir() ...

Danh sách tất cả các hàm xử lý chuỗi trong PHP

Hàm Mô tả chức năng addcslashes() Thêm một dấu gạch chéo ngược () phía trước các ký tự được chỉ định addslashes() Thêm một dấu gạch chéo ngược () phía trước các ký tự là dấu nháy kép, dấu nháy đơn và dấu gạch chéo ngược trong chuỗi bin2hex() Chuyển một chuỗi các ký tự ...

Cách khai báo và sử dụng hàm (function) trong PHP

1) Hàm là gì !? - Hàm là một tập hợp gồm nhiều câu lệnh, các câu lệnh này được sắp xếp theo một thứ tự xác định để xây dựng thành một chức năng cụ thể và mỗi hàm sẽ có một cái tên. Ví dụ Đoạn mã bên dưới, chúng ta có một hàm tên là GioiThieuBanThan. Hàm này gồm ba câu lệnh với ...

Vòng lặp for & foreach trong PHP

1) Vòng lặp là gì !? - Trong PHP, vòng lặp là một loại cú pháp giúp ta lặp lại việc thực thi một đoạn mã nhiều lần. - Ví dụ, nếu tôi muốn hiển thị lên màn hình 100 dòng chữ "Lập Trình Web" thì đáng ra phải gõ 100 câu lệnh echo "<p>Lập Trình Web</p>"; . Tuy nhiên, với việc sử ...

Lệnh điều kiện if ... else trong PHP

"Nếu bạn học tốt môn lập trình web thì bạn sẽ có thể thiết kế được website" - Câu trên được chia làm hai vế: Vế thứ nhất: "Nếu bạn học tốt môn lập trình web" Vế thứ hai: "Bạn sẽ có thể thiết kế được website" - Trong cuộc sống, ta gọi vế thứ nhất là điều kiện, vế thứ hai là một điều ...

Danh sách tất cả các hàm xử lý mảng trong PHP

Hàm Mô tả chức năng array_change_key_case Đổi tên của tất cả các phần tử trong mảng về dạng chữ in hoa hoặc chữ thường array_chunk array_column array_combine array_count_values array_diff array_diff_assoc array_diff_key ...

Danh sách các hàm xử lý tập tin hệ thống trong PHP

Hàm Mô tả chức năng basename() Trả về tên tập tin từ một đường dẫn chgrp() Thay đổi nhóm người dùng của tập tin được chỉ định chmod() Thiết lập quyền hạn của các nhóm người dùng trên tập tin được chỉ định chown() Thay đổi chủ sở hữu của một tập tin copy() Sao ...

Danh sách tất cả các hàm xử lý ngày tháng trong PHP

Hàm Mô tả chức năng checkdate Kiểm tra xem một ngày được xác định có hợp lệ hay không date date_add date_create date_create_from_format data_create_immutable data_create_immutable_from_format date_date_set date_default_timezone_get ...

Vòng lặp while & do while trong PHP

1) Vòng lặp while trong PHP - Trước khi nêu khái niệm "vòng lặp while là gì?" thì tôi có một ví dụ để giúp bạn có thể hình dung sơ qua về vòng lặp while. - Bạn đưa ra một điều kiện, nếu điều kiện đó là sai thì kết thúc, còn nếu đúng thì một đoạn mã sẽ được thực thi và bạn tiếp tục quay ...