hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Lập trình PHP cơ bản
Hàm (functions) trong PHP

Hàm (functions) trong PHP

  • 06-03-2023
  • Toanngo92
  • 1 Comment

Mục lục

  • Khái niệm hàm (function) trong PHP
  • Một số hàm dựng sẵn trong PHP
    • Hàm abs()
    • Hàm gettype()
    • Hàm var_dump()
    • Hàm làm việc với mảng (array functions)
    • Hàm làm việc với chuỗi (string functions)
    • Hàm làm việc với luồng (stream functions)
  • Hàm do người dùng định nghĩa (user defined functions)
    • Tạo một hàm do người dùng định nghĩa trong PHP
    • Đối số và tham số trong hàm PHP (arguments and parameters)
    • Giá trị đối số mặc định trong hàm (default argument value)
    • Từ khóa return trong hàm
    • Khai báo kiểu trả về
    • Truyền đối số theo tham chiếu (pass by reference)
    • Gọi hàm động (Dynamic Function Calls)
    • Đối số được đặt tên (Named argument)
    • Hàm date() và time()
      • Hàm date()
      • Hàm time()

Khái niệm hàm (function) trong PHP

Tương tự các ngôn ngữ khác, hàm trong PHP là một đoạn chương trình độc lập thực hiện một tác vụ cụ thể, được xác định rõ và có thể được người dùng gọi nhiều lần theo yêu cầu của họ.

Một số lợi ích của việc sử dụng hàm trong PHP:

  • Sử dụng lại mã: Các hàm PHP có thể tái sử dụng và có thể được gọi nhiều lần trong cùng một chương trình
  • Mã ngắn gọn hơn (viết mã ít hơn): Việc sử dụng các hàm mang lại sự linh hoạt để viết mã một lần và sử dụng lại mã tương tự bất cứ khi nào được yêu cầu. Điều này làm giảm số lượng mã viết và cũng giảm thời gian viết mã
  • Mã tường minh hơn: Các hàm PHP tách biệt logic lập trình. Điều này cho phép người dùng hiểu được luồng ứng dụng khi mã được chia thành các chức năng khác nhau.

Một số hàm dựng sẵn trong PHP

Các hàm dựng sẵn là các hàm làm sẵn do PHP cung cấp. Một số chức năng cốt lõi có sẵn tự động trong khi một số yêu cầu các phần mở rộng bổ sung để sử dụng chúng.

PHP cung cấp rất nhiều hàm dựng sẵn (trên 1000 hàm) giúp người dùng hoàn thành các tác vụ thông thường. Điều này giúp người dùng dễ dàng thực hiện và chạy lại các tác vụ phổ biến trong một chương trình.

Hàm abs()

Tính giá trị tuyệt đối. Ví dụ:

echo abs(-5);
// output: 5

Hàm gettype()

Người dùng có thể nhập một biến, hằng số làm đối số cho hàm này và đầu ra là một giá trị chuỗi biểu thị kiểu dữ liệu của đối số. Ví dụ:

<?php
$varl = 3; // integer value
$var2 = 5.6; // double value
$var3 = "Abc3462"; // string value
echo gettype ($varl) . "<br>";
echo gettype ($var2). "<br>";
echo gettype ($var3). "<br>";
// output
// integer
// double
// string

Hàm var_dump()

Hàm này cũng chấp nhận một tên biến làm đối số và đầu ra là thông tin chi tiết về đối số được truyền cho nó. Đây là một hàm được sử dụng rất phổ biến trong quá trình gỡ lỗi, vì dữ liệu khi in ra sẽ đầy đủ chi tiết bao gồm giá trị và kiểu của dữ liệu. Ví dụ:

<?php
$integer_variable = 10; 
var_dump($integer_variable);
//Output:
// int(10)
$array_variable = array(
    "name" => "Hello World",
    "age" => 3
);
var_dump($array_variable);
/* Output:
array(2) {
  ["name"]=>
  string(7) "Hello World"
  ["age"]=>
  int(3)
}
*/

Hàm làm việc với mảng (array functions)

Trong PHP, mảng là một phần của hàm dựng sẵn. Một mảng có thể được tạo bằng cách sử dụng hàm array(). Hàm này cho phép người dùng làm việc với mảng theo nhiều cách. Mảng giúp người dùng lưu trữ, quản lý và thao tác trên các tập biến.

Xem thêm ví dụ tại: https://hocvietcode.com/mang-array-trong-php/

Một số hàm nâng cao làm việc với mảng trong PHP:

Tên hàmMô tả
array_change_key_case(array $array, int $case)Chuyển tất cả các khóa trong một mảng thành chữ thường hoặc chữ hoa.
array_chunk(array $array, int $length, bool $preserveKeys)Hàm này chia một mảng thành các mảng nhỏ hơn
function array_column (array $source_array, int|string $column_key = null, int |string $index_key = null)Hàm này tạo một mảng từ cột được đề cập
array_combine (array $keys, array $values)Hàm này tạo ra một mảng sử dụng các phần tử từ các khóa mảng và giá trị của mảng.
array_count_values (array $array)Hàm này đếm tất cả giá trị của mảng
array_diff($array1, $array2, …$arrays);Hàm này trả ra sự khác biệt sau khi so sánh các mảng. Nó chỉ so sánh các giá trị.
array_diff_assoc(array $keys, array $values);Hàm này cũng trả ra sự khác biệt, nhưng so sánh cả khóa và giá trị.
array_diff_key(array $array, array …$arrays)Hàm này cũng trả ra sự khác biệt, nhưng chỉ so sánh các khóa.
array_fill(int $start_index, int $num, mixed $value)Hàm này giúp chèn các giá trị vào một mảng.
array_filter(array $array, callable $callback, int $mode)Hàm này giúp lọc các giá trị mảng bằng hàm gọi lại.
array_flip(array $Sarray)Hàm này hoán đổi tất cả các khóa với các giá trị tương ứng của chúng trong một mảng
array_intersect(array $arr1, array …$arrays)Hàm này so sánh các giá trị trong các mảng và hiển thị kết quả so khớp.
array_map(?callable $callback, array $array, array …$arrays)Hàm này chuyển từng giá trị của một mảng sang hàm do người dùng tạo, từ đó trả ra các giá trị mới
array_key_exists(string $key, array $array)Hàm này kiểm tra mảng để tìm phần tử theo khóa được đề cập.
array_keys (array $array)Hàm này hiển thị tất cả các khóa của một mảng.
array_merge(array $arrays)Chức năng này kết hợp một hoặc
nhiều mảng thành một mảng duy nhất.

Hàm làm việc với chuỗi (string functions)

Các hàm chuỗi cũng là một phần cốt lõi của PHP. Chúng giúp người dùng thực hiện các thao tác khác nhau trên chuỗi. Để thực hiện các tác vụ phổ biến liên quan đến chuỗi, người dùng có thể sử dụng các hàm chuỗi tích hợp khác nhau được lưu trong gói cài đặt PHP. Các chức năng này có thể được sử dụng mà không cần phải cài đặt thêm gì.

Một số hàm phổ biến liên quan đến chuỗi có sẵn trong PHP.

HàmMô tả
sprintf()Hàm này ghi một chuỗi được định dạng vào một biến.
sscanf()Hàm này phân tích đầu vào từ một chuỗi theo một định dạng.
strcasecmp()Hàm này thực hiện so sánh hai chuỗi đã cho và không xác định ký tự hoa thường.
strchr()Hàm này xác định vị trí tìm thấy đầu tiên của chuỗi trong chuỗi khác,
strcmp()Hàm này thực hiện so sánh hai chuỗi đã cho và có xác định ký tự hoa thường.
strcoll()Hàm này thực hiện so sánh hai chuỗi đã cho và không xác định ký tự hoa thường, tuy nhiên có so sánh thêm collation ( ký tự đối chiếu)
stripos()Hàm này trả về vị trí của phiên bản đầu tiên của một chuỗi trong một chuỗi khác không phân biệt chữ hoa chữ thường.
stristr()Hàm này trả về chuỗi đầu tiên của một chuỗi trong một chuỗi khác, không phân biệt chữ hoa chữ thường.
strlen()Hàm tả về độ dài (số ký tự) của chuỗi.
strpbrk()Hàm này tìm kiếm một tập hợp các ký tự nhất định trong một chuỗi,
strpos()Hàm này trả về vị trí của phiên bản đầu tiên của một chuỗi trong một chuỗi khác có phân biệt chữ hoa chữ thường.
strrev()Hàm này trả về một chuỗi đã cho theo thứ tự ngược lại.
strripos()Hàm này trả về vị trí của phiên bản cuối cùng của một chuỗi trong một chuỗi khác, không phân biệt chữ hoa chữ thường.
strrpos()Hàm này trả về vị trí của phiên bản cuối cùng của một chuỗi trong một chuỗi khác. Có phân biệt chữ hoa chữ thường.
strspn()Hàm này trả về số lượng ký tự có trong một chuỗi chỉ có các ký tự từ một danh sách cụ thể.
substr_count()Hàm này trả về tổng số lần một chuỗi con xuất hiện trong một chuỗi
wordwrap()Hàm này bọc một chuỗi thành một số ký tự được chỉ định.
vsprintf()Hàm này ghi một chuỗi được định dạng vào một biến.
strtolower()Hàm này thay đổi chuỗi đối số thành tất cả các chữ cái viết thường.
strrepeat()Hàm có hai đối số – đầu tiên là một chuỗi và thứ hai là một số. Nó xuất ra chuỗi đối số lặp lại nó bằng số lượng được đề cập trong đối số thứ hai.

Hàm làm việc với luồng (stream functions)

Stream(luồng) là cách dễ dàng để truy cập dữ liệu từ tệp (file), mạng hoặc các nguồn khác mà không tiêu tốn bộ nhớ không mong muốn. Nó cho phép người dùng truy cập nhiều loại dữ liệu bằng cách sử dụng một bộ chức năng và công cụ chung, đồng thời xây dựng một giao diện thống nhất, Nó có thể được đọc hoặc ghi theo kiểu tuyến tính và có thể tìm thấy vị trí trong luồng.

Mã bổ sung hướng dẫn luồng về cách quản lý các giao thức hoặc mã hóa cụ thể được gọi là trình bao bọc (wrapper). Các hàm stream cũng là một phần của core PHP. Người dùng có thể sử dụng các hàm này mà không cần phải cài đặt thêm gì.

Một số hàm làm việc với stream:

Trong mô tả này, có khái niệm khá trừu tượng là bucket brigrade, không có khái niệm tiếng Việt, tuy nhiên có thể dịch ra là lữ đoàn xô, hiểu nôm na là dòng người chuyền xô nước từ người này sang người khác để dập lửa. Tương tự với cơ chế truyền dữ liệu của stream.

HàmMô tả
stream_bucket_append()Chức năng này nối bucket vào brigrade
stream_bucket_make_writeable()Hàm này trả về một đối tượng xô từ bucket brigade
đang muốn lấy.
stream_socket_server()Hàm này tạo ra một socket (một giao diện lập trình về ứng dụng mạng sử dụng để truyền cũng như nhận dữ liệu trên internet) máy chủ tên miền Internet hoặc Unix.
stream_supports_lock()Hàm này thông báo luồng có bị khóa hay không.
stream_wrapper_register()Hàm này ghi lại trình bao bọc URL được thiết lập dưới dạng PHP class.
stream_socket_shutdown()Hàm này dừng kết nối song công toàn phần (full duplex).
stream_wrapper_restore()Hàm này giúp khôi phục trình bao bọc tích hợp sẵn chưa được đăng ký trước đó.
stream_wrapper_unregister()Hàm này giúp hủy đăng ký trình bao bọc URL.
stream_copy_to_stream()Hàm này sao chép thông tin từ luồng này sang luồng khác
stream_is local()Hàm này kiểm tra xem một luồng có phải là luồng cục bộ hay không.

Ví dụ stream_bucket_append và stream_bucket_make_writeable:

<?php
// Define a custom stream filter class
class UppercaseFilter extends php_user_filter {
    // Filter function
    public function filter($in, $out, &$consumed, $closing) {
        while ($bucket = stream_bucket_make_writeable($in)) {
            // Convert the data to uppercase
            $bucket->data = strtoupper($bucket->data);
            // Append the modified bucket to the output stream
            stream_bucket_append($out, $bucket);
            // Update the consumed counter
            $consumed += $bucket->datalen;
        }
        // Let PHP know we've processed the data
        return PSFS_PASS_ON;
    }
}

// Register the custom filter
stream_filter_register('uppercase', 'UppercaseFilter');

// Open a stream with the filter applied
$stream = fopen('php://temp', 'w+');
stream_filter_append($stream, 'uppercase');

// Write some data to the stream
fwrite($stream, 'hello, world!');

// Rewind the stream pointer to read the modified data
rewind($stream);

// Read and output the modified data
echo stream_get_contents($stream);

// Close the stream
fclose($stream);
?>

Ví dụ stream_socket_server:

Tạo file stream_socket_server.php:

<?php
// Server address and port
$address = '127.0.0.1';
$port = 8080;

// Create a TCP/IP socket
$socket = stream_socket_server("tcp://$address:$port", $errno, $errstr);

if (!$socket) {
    echo "Failed to create socket: $errstr ($errno)\n";
} else {
    echo "Server started at $address:$port\n";

    // Accept incoming connections
    while ($conn = stream_socket_accept($socket, -1)) {
        // Handle client connection
        echo "Client connected: " . stream_socket_get_name($conn, true) . "\n";

        // Send a welcome message to the client
        fwrite($conn, "Welcome to the server!\n");

        // Read data from the client
        $data = fread($conn, 1024);

        // Process client data (echo back in this case)
        if ($data) {
            echo "Received: $data\n";
            fwrite($conn, "You sent: $data");
        }

        // Close the connection
        fclose($conn);
        echo "Client disconnected.\n";
    }

    // Close the server socket
    fclose($socket);
}
?>

Tạo file tương tác với server client.php:

<?php
// Server address and port
$serverAddress = '127.0.0.1';
$serverPort = 8080;

// Create a TCP/IP socket
$socket = stream_socket_client("tcp://$serverAddress:$serverPort", $errno, $errstr, 30);

if (!$socket) {
    echo "Failed to connect to server: $errstr ($errno)\n";
} else {
    echo "Connected to server.\n";

    // Read the welcome message from the server
    echo "Server: " . fread($socket, 1024) . "\n";

    // Send data to the server
    fwrite($socket, "Hello, server! This is the client.");

    // Read the response from the server
    echo "Server response: " . fread($socket, 1024) . "\n";

    // Close the client socket
    fclose($socket);
    echo "Disconnected from server.\n";
}
?>

Ví dụ stream_supports_lock:

<?php
$fileStream = fopen('test.txt', 'r');
if (stream_supports_lock($fileStream)) {
    echo "The stream supports locking.";
} else {
    echo "The stream does not support locking.";
}
fclose($fileStream);
?>

Ví dụ stream_wrapper_register:

<?php
class VariableStream {
    private $position = 0;
    private $data = "";

    public function stream_open($path, $mode, $options, &$opened_path) {
        // Initialize stream data (e.g., read from a file or database)
        $this->data = "line1\nline2\nline3\n";
        return true;
    }

    public function stream_read($count) {
        $chunk = substr($this->data, $this->position, $count);
        $this->position += strlen($chunk);
        return $chunk;
    }

    public function stream_write($data) {
        // Handle writing to the stream (e.g., append to $this->data)
        $this->data .= $data;
        return strlen($data);
    }

    public function stream_eof() {
        // Implement stream_eof method (end-of-file check)
        return $this->position >= strlen($this->data);
    }

    // Implement other necessary methods (stream_seek, stream_tell, etc.)
    public function stream_seek($offset, $whence) {
        // Implement stream_seek method (seek to a new position)
        switch ($whence) {
            case SEEK_SET:
                $this->position = $offset;
                break;
            case SEEK_CUR:
                $this->position += $offset;
                break;
            case SEEK_END:
                $this->position = strlen($this->data) + $offset;
                break;
        }
        return true;
    }

    public function stream_tell() {
        // Implement stream_tell method (get current position)
        return $this->position;
    }
}

// Register the custom stream wrapper
stream_wrapper_register("var", "VariableStream");

// Open a stream using the "var://myvar" URL
$fp = fopen("var://myvar", "r+");

// Write some data to the stream
fwrite($fp, "new line\n");

// Rewind the stream
rewind($fp);

// Read and echo the contents of the stream
while (!feof($fp)) {
    echo fgets($fp);
}

// Close the stream
fclose($fp);
?>

Ví dụ stream_socket_shutdown:

<?php
// Create a TCP/IP socket client
$socket = stream_socket_client('tcp://example.com:80', $errno, $errstr, 30);

if (!$socket) {
    echo "Failed to connect: $errstr ($errno)\n";
} else {
    // Send a request to the server
    $request = "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n";
    fwrite($socket, $request);

    // Read and output the server response
    while (!feof($socket)) {
        echo fread($socket, 8192);
    }

    // Shutdown writing part of the socket
    stream_socket_shutdown($socket, STREAM_SHUT_WR);

    // Close the socket
    fclose($socket);
}
?>

Ví dụ stream_wrapper_restore và stream_wrapper_unregister:

<?php
class VariableStream {
    private $position = 0;
    private $data = "";

    public function stream_open($path, $mode, $options, &$opened_path) {
        // Initialize stream data (e.g., read from a file or database)
        $this->data = "line1\nline2\nline3\n";
        return true;
    }

    public function stream_read($count) {
        $chunk = substr($this->data, $this->position, $count);
        $this->position += strlen($chunk);
        return $chunk;
    }

    public function stream_write($data) {
        // Handle writing to the stream (e.g., append to $this->data)
        $this->data .= $data;
        return strlen($data);
    }

    public function stream_eof() {
        // Implement stream_eof method (end-of-file check)
        return $this->position >= strlen($this->data);
    }

    // Implement other necessary methods (stream_seek, stream_tell, etc.)
    public function stream_seek($offset, $whence) {
        // Implement stream_seek method (seek to a new position)
        switch ($whence) {
            case SEEK_SET:
                $this->position = $offset;
                break;
            case SEEK_CUR:
                $this->position += $offset;
                break;
            case SEEK_END:
                $this->position = strlen($this->data) + $offset;
                break;
        }
        return true;
    }

    public function stream_tell() {
        // Implement stream_tell method (get current position)
        return $this->position;
    }
}

// Register the custom stream wrapper
stream_wrapper_register("var", "VariableStream");

// Open a stream using the "var://myvar" URL
$fp = fopen("var://myvar", "r+");

// Write some data to the stream
fwrite($fp, "new line\n");

// Rewind the stream
rewind($fp);

// Read and echo the contents of the stream
while (!feof($fp)) {
    echo fgets($fp);
}

// Close the stream
fclose($fp);

// Assume we have previously unregistered the "var" protocol
// using stream_wrapper_unregister (if it existed)
$existed = in_array("var", stream_get_wrappers());

// Restore the original "var" protocol if it was previously registered
if ($existed) {
    stream_wrapper_restore("var");
}

// Now you can use the "var://" protocol again
$restoredFp = fopen("var://myvar", "r+");
fwrite($restoredFp, "Restored stream wrapper!\n");
rewind($restoredFp);

echo "\nAfter restoring:\n";
while (!feof($restoredFp)) {
    echo fgets($restoredFp);
}

fclose($restoredFp);
?>

Ví dụ stream_copy_to_stream:

<?php
// Assume we have a source stream (e.g., reading from a file)
$src = fopen("test1.txt", "r");

// Create a destination stream (e.g., writing to a file)
$dest = fopen("test2.txt", "w");

// Copy 1024 bytes from the source stream to the destination stream
echo stream_copy_to_stream($src, $dest, 1024) . " bytes copied to test2.txt\n";

// Close both streams
fclose($src);
fclose($dest);
?>

Ví dụ:

$fp = fsockopen("www.example.com", 80);

if (!$fp) {
    echo "Unable to open connection";
} else {
    fwrite($fp, "GET \/ HTTP\/1.0");
    stream_set_timeout($fp, 2);
    $res = fread($fp, 2000);
    $info = stream_get_meta_data($fp);
    fclose($fp);

    if ($info['timed_out']) {
        echo "Connection timed out!";
    } else {
        echo $res;
    }
}

var_dump(stream_is_local("www.example.com"));
echo "<br>";
var_dump(stream_is_local("/etc"));

Hàm do người dùng định nghĩa (user defined functions)

Mặc dù PHP có nhiều hàm dựng sẵn nhưng người dùng vẫn có thể tạo các hàm tùy chỉnh cho các mục đích sử dụng khác nhau. Không giống như các chức năng tích hợp sẵn có sẵn, các hàm do người dùng xác định được tạo bởi người dùng.

Các hàm do người dùng định nghĩa có thể được định nghĩa là những chức năng được tạo bởi người dùng tùy thuộc vào yêu cầu của họ để hoàn thành một tác vụ cụ thể.
Tuy nhiên, có thể phát sinh các tình huống trong đó không chức năng tích hợp sẵn nào có thể phục vụ mục đích này. Trong những trường hợp như vậy, với các hàm do người dùng định nghĩa, người dùng có thể tạo các hàm theo tác vụ sẽ thực hiện.

Tạo một hàm do người dùng định nghĩa trong PHP

Một số quy tắc cần tuân thủ:

  • Tên của hàm chỉ được bao gồm bảng chữ cái, số và dấu gạch dưới, tên hàm không chứa ký tự đặc biệt.
  • Tên hàm phải bắt đầu bằng bảng chữ cái hoặc dấu gạch dưới. Một số không thể được sử dụng ở đầu tên hàm.
  • Tên hàm có phân biệt chữ hoa – thường.
  • Sau tên hàm, sử dụng dấu ngoặc tròn mở và đóng ( ), bên trong dấu ngoặc này là tham số truyền vào (nếu có)
  • Cuối cùng, sử dụng dấu ngoặc nhọn mở { để chỉ định phần mở đầu viết mã hàm và kết thúc bằng dấu ngoặc nhọn đóng }

Cú pháp hàm không có tham số:

function functionName(){
   // todo
}

Ví dụ:

function say_hello() {
  echo "Hello!";
}

// Call the function
say_hello();

Đối số và tham số trong hàm PHP (arguments and parameters)

Đối với một hàm, người dùng có thể viết một hoặc nhiều tham số (parameter) mà họ có thể truyền đối số (argument) trong khi gọi hàm. Các đối số có thể được sử dụng để cung cấp dữ liệu cho các chức năng. Một đối số tương tự như một biến. Để chuyển một đối số cho một hàm, người dùng có thể chỉ định nó trong dấu ngoặc đơn ngay sau tên hàm. Người dùng có thể chuyển bao nhiêu tham số theo yêu cầu bằng cách tách từng tham số bằng dấu phẩy.

Ví dụ:

function displayStudentInfo($name, $age, $gradeLevel) {
  echo "Name: " . $name . "<br>";
  echo "Age: " . $age . "<br>";
  echo "Grade Level: " . $gradeLevel;
}

// Call the function with arguments
displayStudentInfo("John Doe", 16, 11);
/* Output:
Name: John Doe
Age: 16
Grade Level: 11
*/

Giá trị đối số mặc định trong hàm (default argument value)

Đối số chức năng đóng một vai trò quan trọng trong việc thực thi mã chức năng. Có những trường hợp khi người dùng có thể quên truyền đối số trong khi gọi hàm, điều này có thể dẫn đến kết quả không mong muốn, Do đó, để tránh những trường hợp như vậy, một giá trị mặc định được gán cho các đối số, Giá trị như vậy được gọi là giá trị đối số mặc định (default argument value). Giá trị này sẽ được sử dụng nếu không có giá trị nào được nhập cho đối số khi hàm được thực thi.

Ví dụ:


function student_property($name, $age, $gender = "unknown") {
  echo "Name: $name | Age: $age | Gender: $gender <br>";
}

// Calling the function with all three arguments passed
student_property("John Doe", 19, "Male");

// Calling the function with two arguments, and utilizing the default argument value for gender
student_property("Jane Smith", 20);

// Calling the function with all three arguments passed again
student_property("Alex Patel", 21, "Female");


Đây là một ví dụ về hàm student_property() chuyển vào tên, tuổi và giới tính của một sinh viên. Tham số giới tính đã được cung cấp một giá trị mặc định là “unknown” và sẽ được sử dụng nếu không có đối số nào được chuyển rõ ràng cho hàm. Bạn có thể thấy điều này hoạt động như thế nào bằng cách chạy mã và quan sát đầu ra.

Từ khóa return trong hàm

Một khía cạnh quan trọng của các hàm PHP là chúng cũng có thể trả về kết quả. Ví dụ: nếu có một hàm được xác định để thực hiện các phép tính toán học nhất định, người dùng có thể muốn trả lại kết quả của các phép tính cho chương trình gọi. Trong những trường hợp như vậy, khi hàm được gọi, kết quả của hàm có thể được lấy trong câu lệnh gọi.

Để làm điều này, người dùng có thể sử dụng lệnh return bên trong thân hàm làm câu lệnh cuối cùng của hàm. Nó giúp trả về bất kỳ biến hoặc giá trị nào từ một hàm. Lưu ý rằng chỉ có thể trả về một biến/giá trị. Từ khóa return không thể được theo sau bởi nhiều giá trị.

Ví dụ:

function addNumbers($num1, $num2) {
  $sum = $num1 + $num2;
  return $sum;
}

// Call the function and store the result in a variable
$total = addNumbers(5, 10);

// Output the result
echo "The total is: " . $total;

Khai báo kiểu trả về

PHP 8 cung cấp một tính năng mới được gọi là khai báo kiểu cho lệnh return. Tương tự như khai báo kiểu cho đối số hàm, nếu yêu cầu nghiêm ngặt được bật, mã sẽ hiển thị ‘Lỗi nghiêm trọng’ (fatal error) trong trường hợp kiểu không khớp.

Để thực hiện khai báo kiểu cho một hàm trả về, trong khi tạo hàm, người dùng phải chèn thêm dấu hai chấm (:) và gõ trước dấu ngoặc mở “{“

Ví dụ:

declare(strict_types=1); // strict requirement
function multiply(float|int $num1, float|int $num2) : float {
  return $num1 * $num2;
}
multiply(6,8);

Hàm này nhận hai tham số, $num1 và $num2, cả hai đều có thể là kiểu dữ liệu float hoặc int. Thân hàm nhân hai số và trả về kết quả dưới dạng float.

Cú pháp : float ở cuối phần khai báo hàm được sử dụng để chỉ ra rằng hàm này sẽ luôn trả về giá trị float. Nếu hàm được gọi và không trả về giá trị float, chẳng hạn như nếu nó trả về giá trị int, string hoặc null, thì PHP sẽ đưa ra lỗi kiểu dữ liệu (type error).

Truyền đối số theo tham chiếu (pass by reference)

Trong PHP, các đối số có thể được truyền bằng một trong hai cách sau:

  • Truyền tham trị (pass by value)
  • Truyền tham chiếu (pass by reference)

Nói chung trong PHP, mặc định các đối số được truyền theo giá trị (truyền tham trị). Điều này có nghĩa là một bản sao của giá trị được sử dụng trong hàm và biến thực được truyền vào hàm không bị sửa đổi.

Tuy nhiên, nếu một đối số hàm được truyền theo tham chiếu, bất kỳ sửa đổi nào được thực hiện đối với đối số trong hàm sẽ tự động sửa đổi biến được truyền. Để thay đổi đối số hàm thành tham chiếu, người dùng có thể sử dụng toán tử &. (Tương tự khái niệm con trỏ – pointer trong C/C++).

Ví dụ:

function increment(&$num) {
  $num++;
}

$num = 5;
increment($num);
echo $num; // Output: 6

Gọi hàm động (Dynamic Function Calls)

PHP cho phép người dùng phân bổ tên hàm dưới dạng chuỗi cho các biến và sau đó sử dụng các biến này theo cách giống như tên hàm.

Ví dụ:

function add($num1, $num2) {
  return $num1 + $num2;
}

$func_name = "add";
$num1 = 5;
$num2 = 10;

$result = $func_name($num1, $num2);

echo $result; // Output: 15

Trong ví dụ này, chúng ta định nghĩa một hàm add nhận hai đối số và trả về tổng của chúng. Sau đó, chúng ta khai báo một biến chuỗi $func_name và đặt nó thành tên của hàm mà chúng ta muốn gọi. Tiếp theo, chúng ta xác định hai biến $num1 và $num2 chứa các giá trị mà chúng ta muốn chuyển làm đối số cho hàm.

Cuối cùng, bằng cách sử dụng các lời gọi hàm động, chúng ta gọi hàm có tên được lưu trữ trong biến $func_name và chuyển vào các giá trị của $num1 và $num2. Giá trị trả về của hàm được lưu trữ trong biến $result, sau đó chúng ta sẽ in ra màn hình.

Các lệnh gọi hàm động có thể hữu ích khi bạn cần gọi một hàm động trong thời gian chạy hoặc nếu bạn muốn tạo mã linh hoạt hơn và có thể tái sử dụng.

Đối số được đặt tên (Named argument)

Named argument là một tính năng mới được giới thiệu trong PHP 8.0. Nó cho phép người dùng truyền đối số cho một hàm chỉ xem xét tên tham số chứ không phải vị trí tham số, Điều này cho phép người dùng truyền đối số mà không cần quan tâm đến vị trí của tham số. Họ có thể chỉ cần chỉ định tên chính xác của các tham số và truyền giá trị cho hàm.

Ví dụ:

function printStudentDetails(string $name, int $age, string $major) {
    echo "Name: $name <br>";
    echo "Age: $age <br>";
    echo "Major: $major <br>";
}

// Call the function using named arguments
printStudentDetails(major: 'Computer Science', name: 'John Doe', age: 21);

Trong ví dụ này, chúng ta đã định nghĩa một hàm printStudentDetails nhận ba tham số. Khi gọi hàm, thay vì truyền các đối số theo vị trí của chúng, chúng ta có thể truyền chúng bằng cách sử dụng các tên chẳng hạn như major: ‘Computer Science’. Bằng cách này, ngay cả khi chúng ta có nhiều đối số, chúng ta không cần phải lo lắng về thứ tự của chúng. Chúng ta chỉ cần cung cấp tên cùng với giá trị của chúng, và tất nhiên, tên cung cấp cần phải so khớp với biến.

Lưu ý rằng các đối số được đặt tên chỉ khả dụng trong PHP 8 và các phiên bản mới hơn.

Hàm date() và time()

Hàm date()

Hàm PHP date() hiển thị ngày và/hoặc thời gian hiện tại của máy chủ. Chức năng này giúp người dùng định dạng lại timestamp nhất định sao cho ngày và giờ dễ đọc hơn. Timestamp có thể được định nghĩa là một chuỗi ký tự, biểu thị ngày và/hoặc thời gian diễn ra một sự kiện cụ thể.

Xem thêm: https://www.php.net/manual/en/function.date.php

Cú pháp:

date(format,timestamp);

Tham số format cho biết ngày phải được định dạng như thế nào. Để thực hiện định dạng bổ sung, người dùng có thể sử dụng các ký tự như ‘/’, ‘.’, ‘-‘ giữa các ký tự.

Ví dụ:

<?php
$currentDate = date('Y-m-d H:i:s'); // example output: 2021-05-25 15:38:22

$dateOnly = date('m/d/Y'); // example output: 05/25/2021

$timeOnly = date('h:i A'); // example output: 03:38 PM

$year = date('Y'); // example output: 2021

$month = date('F'); // example output: May

$dayOfWeek = date('l'); // example output: Tuesday

echo "Current Date: $currentDate <br>";
echo "Date Only: $dateOnly <br>";
echo "Time Only: $timeOnly <br>";
echo "Year: $year <br>";
echo "Month: $month <br>";
echo "Day of Week: $dayOfWeek <br>";

Hàm time()

Hàm time() trong PHP hiển thị thời gian hiện tại tính bằng giây. Hàm date() giúp chuyển đổi số giây thành ngày hiện tại.

Ví dụ:

<?php
echo "Current Timestamp: " . time();
// Current Timestamp: 1630551312
?>

Bài viết liên quan:

Hướng dẫn sử dụng xdebug để gỡ lỗi PHP bằng visual studio code môi trường windows
Hướng dẫn cấu hình Extension live server tự động tải lại PHP khi cập nhật file trên visual studio code
Kỹ thuật AJAX trong PHP
Làm việc với JSON trong PHP
Chuyển hướng trình duyệt, download file bằng HTTP Header trong PHP
Một số cải tiến mới của PHP 8
Nhận dạng trình duyệt và nền tảng trong PHP
Từ khóa final, static, overloading và magic method trong PHP
Abstract Class (lớp trừu tượng) trong PHP
Interface trong hướng đối tượng PHP
Method (phương thức), public,private,protected, method overriding trong hướng đối tượng PHP
Iterable và iterator trong PHP

1 Comments

  1. Pingback: Mảng (Array) trong PHP - Web888 chia sẻ kiến thức lập trình, kinh doanh, mmo

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Mẫu prompt tạo mô tả chi tiết bối cảnh

Một số cải tiến trong ASP.NET Core, Razor Page, Model Binding, Gabbage collection

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×