PHP Cơ bản
PHP Nâng cao
PHP & Cơ sở dữ liệu MySQL
Ví dụ PHP
Tài liệu tham khảo PHP
Quảng cáo

Các hàm trong PHP

Trong hướng dẫn này, bạn sẽ học cách tạo các hàm tùy chỉnh của riêng bạn trong PHP.

Các hàm tích hợp trong PHP

Một hàm là một khối mã độc lập thực hiện một nhiệm vụ cụ thể.

PHP có một bộ sưu tập khổng lồ của nội bộ hoặc các hàm tích hợp sẵn mà bạn có thể gọi trực tiếp trong mã nguồn PHP của bạn để thực hiện một nhiệm vụ cụ thể, như gettype(), print_r(), var_dump vv

Vui lòng xem phần tham khảo PHP để biết danh sách đầy đủ các hàm tích hợp sẵn của PHP.

Các hàm do người dùng định nghĩa trong PHP

Ngoài các hàm có sẵn, PHP cũng cho phép bạn định nghĩa các hàm của riêng mình. Đó là một cách để tạo các gói mã có thể sử dụng lại để thực hiện các tác vụ cụ thể và có thể được lưu giữ và bảo trì riêng biệt ở dạng chương trình chính. Dưới đây là một số ưu điểm của việc sử dụng các hàm:

  • Các hàm làm giảm sự lặp lại của mã trong một chương trình - Hàm cho phép bạn trích xuất khối mã thường được sử dụng thành một thành phần duy nhất. Giờ đây, bạn có thể thực hiện cùng một tác vụ bằng cách gọi hàm này ở bất cứ đâu bạn muốn trong tập lệnh của mình mà không cần phải sao chép và dán lại cùng một khối mã.
  • Các hàm làm cho mã dễ bảo trì, sửa chữa hơn nhiều - Vì một hàm được tạo một lần có thể được sử dụng nhiều lần, vì vậy bất kỳ thay đổi nào được thực hiện bên trong một hàm đều tự động được thực hiện ở tất cả các nơi mà không cần chạm vào một số tệp.
  • Các hàm giúp loại bỏ lỗi dễ dàng hơn - Khi chương trình được chia nhỏ thành các hàm, nếu có lỗi xảy ra, bạn biết chính xác hàm nào gây ra lỗi và tìm nó ở đâu. Do đó, việc sửa lỗi trở nên dễ dàng hơn rất nhiều.
  • Các hàm có thể được sử dụng lại trong ứng dụng khác - Bởi vì một chức năng được tách biệt với phần còn lại của tập lệnh, thật dễ dàng để sử dụng lại chức năng tương tự trong các ứng dụng khác chỉ bằng cách đưa vào tệp php chứa các chức năng đó.

Phần sau đây sẽ cho bạn thấy bạn có thể dễ dàng tạo ra hàm của riêng mình trong PHP như thế nào.

Tạo và gọi các hàm

Cú pháp cơ bản của việc tạo một hàm tùy chỉnh có thể được tạo dưới dạng sau:

function functionName () {
    // Mã được thực thi
}

Khai báo của một hàm do người dùng định nghĩa bắt đầu bằng từ function, tiếp theo là tên của hàm bạn muốn tạo, sau đó là dấu ngoặc đơn, tức là ()và cuối cùng đặt mã hàm của bạn giữa các dấu ngoặc nhọn {}.

Đây là một ví dụ đơn giản về một hàm do người dùng định nghĩa, hiển thị ngày hôm nay:

Ví dụ

<?php
// Định nghĩa hàm
function whatIsToday(){
    echo "Hôm nay là " . date('l', mktime());
}
// Gọi hàm
whatIsToday();
?>
 

Ghi chú: Tên hàm phải bắt đầu bằng một chữ cái hoặc ký tự gạch dưới không phải bằng một số, theo sau là thêm các chữ cái, số hoặc ký tự gạch dưới khác. Tên hàm không phân biệt chữ hoa chữ thường.

Hàm với các tham số

Bạn có thể chỉ định các tham số khi bạn xác định hàm của mình để chấp nhận các giá trị đầu vào tại thời điểm chạy. Các tham số hoạt động giống như các biến giữ chỗ trong một hàm; chúng được thay thế tại thời điểm chạy bởi các giá trị (được gọi là đối số) được cung cấp cho hàm tại thời điểm gọi.

function myFunc ($oneParameter, $anotherParameter) {
    // Mã được thực thi
}

Bạn có thể xác định bao nhiêu tham số tùy thích. Tuy nhiên, đối với mỗi tham số bạn chỉ định, một đối số tương ứng cần được chuyển cho hàm khi nó được gọi.

Hàm getSum() trong ví dụ sau đây có hai giá trị số nguyên như các đối số, chỉ cần thêm chúng lại với nhau và sau đó hiển thị kết quả trong trình duyệt.

Ví dụ

<?php
// Định nghĩa
function getSum($num1, $num2){
  $sum = $num1 + $num2;
  echo "Tổng của 2 số $num1 và $num2 là: $sum";
}
// Gọi hàm
getSum(10, 20); // Kết quả: Tổng của 2 số 10 và 20 là: 30
?>
 

Mẹo: Đối số là một giá trị mà bạn truyền cho một hàm và một tham số là biến trong hàm nhận đối số. Tuy nhiên, trong cách sử dụng phổ biến, các thuật ngữ này có thể thay thế cho nhau, tức là một đối số là một tham số là một đối số.

Các hàm với các tham số tùy chọn và giá trị mặc định

Bạn cũng có thể tạo các hàm với các tham số tùy chọn - chỉ cần chèn tên tham số, theo sau là dấu bằng ( =), theo sau là giá trị mặc định, như thế này.

Ví dụ

<?php
// Định nghĩa
function customFont($font, $size=1.5){
    echo "<p style=\"font-family: $font; font-size: {$size}em;\">Hello, world!</p>";
}
 
// Gọi hàm
customFont("Arial", 2);
customFont("Times", 3);
customFont("Courier");
?>

Như bạn có thể thấy lời gọi thứ ba đến customFont()không bao gồm đối số thứ hai. Điều này khiến ngôn ngữ PHP sử dụng giá trị mặc định cho tham số $size là 1,5.

Trả lại giá trị từ một hàm

Một hàm có thể trả về một giá trị trở lại tập lệnh được gọi là hàm bằng cách sử dụng câu lệnh return. Giá trị có thể thuộc bất kỳ kiểu nào, bao gồm cả mảng và đối tượng.

Ví dụ

<?php
// Định nghĩa
function getSum($num1, $num2){
    $total = $num1 + $num2;
    return $total;
}
 
// In ra giá trị gọi lại
echo getSum(5, 10); // Kết quả: 15
?>

Một hàm không thể trả về nhiều giá trị. Tuy nhiên, bạn có thể nhận được kết quả tương tự bằng cách trả về một mảng, như được minh họa trong ví dụ sau:

Ví dụ

<?php
// Định nghĩa
function divideNumbers($dividend, $divisor){
    $quotient = $dividend / $divisor;
    $array = array($dividend, $divisor, $quotient);
    return $array;
}
 
// Gán các biến như thể chúng là một mảng
list($dividend, $divisor, $quotient) = divideNumbers(10, 2);
echo $dividend;  // Kết quả: 10
echo $divisor;   // Kết quả: 2
echo $quotient;  // Kết quả: 5
?>

Chuyển các đối số đến một hàm bằng cách tham chiếu

Trong PHP, có hai cách bạn có thể truyền các đối số cho một hàm: theo giá trị và bằng tham chiếu . Theo mặc định, các đối số của hàm được truyền theo giá trị để nếu giá trị của đối số bên trong hàm bị thay đổi, nó sẽ không bị ảnh hưởng bên ngoài hàm. Tuy nhiên, để cho phép một hàm sửa đổi các đối số của nó, chúng phải được chuyển qua tham chiếu.

Việc chuyển một đối số bằng tham chiếu được thực hiện bằng cách thêm dấu và ( &) vào tên đối số trong định nghĩa hàm, như được hiển thị trong ví dụ dưới đây:

Ví dụ

<?php
/* Định nghĩa một hàm nhân một số với chính nó và trả về giá trị mới */
function selfMultiply(&$number){
    $number *= $number;
    return $number;
}
 
$mynum = 5;
echo $mynum; // Kết quả: 5
 
selfMultiply($mynum);
echo $mynum; // Kết quả: 25
?>

Phạm vi biến

Tuy nhiên, bạn có thể khai báo các biến ở bất kỳ đâu trong tập lệnh PHP. Tuy nhiên, vị trí của khai báo xác định mức độ hiển thị của một biến trong chương trình PHP, tức là nơi biến có thể được sử dụng hoặc truy cập. Khả năng tiếp cận này được gọi là phạm vi thay đổi .

Theo mặc định, các biến được khai báo trong một hàm là cục bộ và chúng không thể được xem hoặc thao tác từ bên ngoài hàm đó, như được minh họa trong ví dụ dưới đây:

Ví dụ

<?php
// Định nghĩa
function test(){
    $greet = "Hello World!";
    echo $greet;
}
 
test(); // Kết quả: Hello World!
 
echo $greet; // Xuấ hiện lỗi biến không xác định
?>

Tương tự, nếu bạn cố gắng truy cập hoặc nhập một biến bên ngoài vào bên trong hàm, bạn sẽ gặp phải lỗi biến không xác định, như được hiển thị trong ví dụ sau:

Ví dụ

<?php
$greet = "Hello World!";
 
// Định nghĩa
function test(){
    echo $greet;
}
 
test();  // Lỗi biến không xác định
 
echo $greet; // Kết quả: Hello World!
?>

Như bạn có thể thấy trong các ví dụ trên, biến được khai báo bên trong hàm không thể truy cập từ bên ngoài, tương tự như vậy, biến được khai báo bên ngoài hàm không thể truy cập bên trong hàm. Sự tách biệt này làm giảm khả năng các biến trong một hàm bị ảnh hưởng bởi các biến trong chương trình chính.

 

Mẹo: Có thể sử dụng lại cùng một tên cho một biến trong các hàm khác nhau, vì các biến cục bộ chỉ được công nhận bởi hàm mà chúng được khai báo.

Từ khóa toàn cầu (global)

Có thể xảy ra trường hợp bạn cần nhập một biến từ chương trình chính vào một hàm hoặc ngược lại. Trong những trường hợp như vậy, bạn có thể sử dụng từ khóa global trước các biến bên trong một hàm. Từ khóa này biến biến thành một biến toàn cục, làm cho nó hiển thị hoặc có thể truy cập được cả bên trong và bên ngoài hàm, như minh họa trong ví dụ bên dưới:

Ví dụ

<?php
$greet = "Hello World!";
 
// Định nghĩa
function test(){
    global $greet;
    echo $greet;
}
 
test(); // Kết quả: Hello World!
echo $greet; // Kết quả: Hello World!
 
// Gán giá trị mới cho biến
$greet = "Goodbye";
 
test(); // Kết quả: Goodbye
echo $greet; // Kết quả: Goodbye
?>

Bạn sẽ tìm hiểu thêm về khả năng hiển thị và kiểm soát truy cập trong chương các lớp và đối tượng PHP .

Tạo hàm đệ quy

Một hàm đệ quy là một hàm gọi đi gọi lại chính nó cho đến khi một điều kiện được thỏa mãn. Các hàm đệ quy thường được sử dụng để giải các phép tính toán học phức tạp hoặc để xử lý các cấu trúc lồng nhau sâu, ví dụ: in tất cả các phần tử của một mảng lồng nhau sâu.

Ví dụ sau minh họa cách hoạt động của một hàm đệ quy.

Ví dụ

<?php
// Định nghĩa hàm đệ quy
function printValues($arr) {
    global $count;
    global $items;
    
    // Kiểm tra dữ liệu có phải mảng không
    if(!is_array($arr)){
        die("Lỗi: dữ liệu không phải là mảng");
    }
    
    /*
    Lặp qua mảng, nếu giá trị là bản thân một mảng thì gọi một cách đệ quy hàm khác thêm giá trị được tìm thấy vào mảng các mục đầu ra và bộ đếm số gia tăng 1 cho mỗi giá trị được tìm thấy
    */
    foreach($arr as $a){
        if(is_array($a)){
            printValues($a);
        } else{
            $items[] = $a;
            $count++;
        }
    }
    
    // Trả về tổng số và giá trị được tìm thấy trong mảng
    return array('total' => $count, 'values' => $items);
}
 
// Xác định mảng lồng nhau
$species = array(
    "birds" => array(
        "Eagle",
        "Parrot",
        "Swan"
    ),
    "mammals" => array(
        "Human",
        "cat" => array(
            "Lion",
            "Tiger",
            "Jaguar"
        ),
        "Elephant",
        "Monkey"
    ),
    "reptiles" => array(
        "snake" => array(
            "Cobra" => array(
                "King Cobra",
                "Egyptian cobra"
            ),
            "Viper",
            "Anaconda"
        ),
        "Crocodile",
        "Dinosaur" => array(
            "T-rex",
            "Alamosaurus"
        )
    )
);
 
// Đếm và in các giá trị trong mảng lồng nhau
$result = printValues($species);
echo $result['total'] . ' value(s) found: ';
echo implode(', ', $result['values']);
?>
 

Ghi chú: Hãy cẩn thận trong khi tạo các hàm đệ quy, vì nếu mã được viết không đúng cách, nó có thể dẫn đến một vòng lặp vô hạn của việc gọi hàm.

Bài viết này đã giúp ích cho bạn?

Advertisements