Hàm trong php

Hàm trong php hướng dẫn cách tạo hàm, gọi hàm trong php. Hàm thông thường, hàm nặc danh, hàm mũi tên, hàm trong class….


Định nghĩa hàm mới trong PHP

PHP có sẵn hơn 1000 hàm, nhưng bạn vẫn phải tạo thêm hàm mới để phục vụ cho những nhu cầu cụ thể trong từng dự án của mình.

Hàm là một khối lệnh nhằm thi hành một chức năng cụ thể nào đó. Ví dụ : hàm cắt bỏ dấu tiếng việt của 1 chuỗi có dấu, hàm tính delta của 1 phương trình bậc hai, hàm tính tổng tiền giỏ hàng…

Code trong hàm chỉ chạy khi tên hàm được gọi. Và cú pháp để định nghĩa một hàm trong php là như sau:

function tênhàm () {
  // code trong hàm
}

tênhàm phải bắt đầu bằng ký tự a-z hoặc dấu _ , tên hàm không phân biệt chữ hoa thường (đặt chữ hoa thường đều giống nhau) .

Bạn nên đặt tên hàm sao cho nó diễn tả đúng chức năng của hàm, dễ quản lý hơn.  Ví dụ.

<?php //f1.php
function chao(){
    echo "<h1>Chào quý khách</h1><hr>";
}
chao();
CHAO();

Tham số của hàm

  • Thông số của hàm là các thông tin mà bạn chuyển cho hàm lúc gọi nó. Mỗi tham số tương tự như các biến.
  • Muốn hàm dùng được các tham số thì cần khai báo lúc định nghĩa hàm.
  • Mỗi hàm có thể một hoặc nhiều tham số tùy nhu cầu.

Ví dụ sau là hàm có một tham số:

<?php //f1.php
chao("Chào quý khách");
Chao("Chào anh Tèo");
function chao( $str ){
    echo "<h1> $str </h1><hr>";
}

Khi hàm chao được gọi,  giá trị trong lời gọi hàm sẽ được gán vào biến $str để hàm sử dụng. Nhờ dùng tham số mà việc dùng hàm sẽ rất linh động , uyển chuyển.

 Ví dụ sau là hàm có hai tham số, các tham số cách nhau bởi dấu phẩy

<?php //f1.php
function chao($title, $message){
    echo "<p>$title! <b>$message</b> </p>";
}
chao("Chào quý khách" , "Chúc an lành");
Chao("Chào anh", "Tèo");

Kiểu dữ liệu của tham số

Trong định nghĩa của hàm, bạn không bắt buộc phải khai báo kiểu dữ liệu của tham số. Vì PHP tự động dò kiểu. Còn nếu muốn (cho rõ ràng) thì Bạn cũng có thể khai báo kiểu dữ liệu cho các tham số cũng đượ. Khai báo kiểu dữ liệu ở phía trước tên của tham số, Xem ví dụ sau:

<?php //f1.php
const TYGIA = 25000;
function thanhtienvn(int $sosp, int $giausd, string $kyhieu){
    $tien  = $sosp*$giausd*TYGIA ;
    $tien = number_format($tien , 0, "", ".") . $kyhieu;
    echo "<p>Thành tiền = " . $tien . "</p>"; 
}
thanhtienvn(5, 10, " VNĐ") ; // 1.250.000 VNĐ

Giá trị mặc định của tham số

Trong code  định nghĩa hàm, có thể chỉ định giá trị mặc định cho tham số. Các giá trị mặc định sẽ được dùng khi bạn gọi hàm mà không truyền giá trị cho tham số.

<?php //f1.php
function chao($str = "Chào quý khách" ){
    echo "<p> $str</p>"; 
}
chao("Chào anh Tèo") ; 
chao() ; //Không truyền giá trị cho tham số, giá trị mặc định sẽ dùng

Giá trị trả về của hàm

Để trả về một giá trị sau khi tính toán cho nơi gọi hàm, dùng lệnh return bên trong hàm.

<?php //f1.php
function hoten($ten, $ho){
    $ht = $ho. " ". $ten;
    $ht = mb_convert_case($ht, 0);
    return $ht; 
}
echo hoten("báu", "đào kho") , "<br>";
echo hoten("vàng", "đào được") , "<br>";

Khai báo kiểu trả về cho hàm

Không bắt buộc nhưng nếu muốn thì Bạn có thể khai báo kiểu dữ liệu trả về của hàm lúc định nghĩa hàm. Bằng dùng dấu : ở phía sau tên của hàm.

<?php //f1.php
function hoten($ten, $ho):string {
    $ht = $ho. " ". $ten;
    $ht = mb_convert_case($ht, 0);
    return $ht; 
}
echo hoten("tới", "mai anh") , "<br>";

Truyền tham số dạng reference (tham chiếu)

Thường thì khi gọi hàm, chúng ta truyền giá trị cho các tham số (như các ví vụ ở trên). Nhưng đôi khi cần phải truyền dạng reference cho tham số. Khi đó bên trong hàm nếu có gán giá trị mới thì sẽ ảnh hưởng tới biến gốc ở bên ngoài của hàm.

Để chỉ định 1 tham số truyền ở dạng reference thì thêm dấu & ở trước tên của tham số.

<?php //f1.php
$toan = 5;  $van = 8;
function cong2( &$x ){ $x = $x + 2;  }
cong2($toan); 
cong2($van);
echo "<p>Toán = $toan </p> ";
echo "<p>Văn = $van </p> ";

Gọi hàm thông qua biến

Có thể gọi hàm thông qua các biến cũng được. Xem 2 ví dụ sau:

function chao($str){ echo "<h3>$str</h3>"; };
$c = "chao";
$c("Chào quý khách");
<?php //f1.php
class abc {
    function ham1() { $h2 = 'ham2'; $this->$h2(); }
    function ham2() { echo "Ham2. Chào bạn <br>"; }
}
$c1 = new abc;
 $c1->ham1();
$f = "ham2"; $c1->$f();

Anonymous function – hàm nặc đanh

Anonymous function tức là hàm không có tên (hàm nặc danh), còn gọi là closure. Chúng hữu dụng trong trường hợp làm callback cho các hàm khác  

Định nghĩa hàm nặc danh

<?php //f1.php
$chao = function($str){ echo "<h3>$str</h3>"; };
$chao("Chào quý khách");

Dùng biến ở ngoài hàm anonymous

Với các anonymous function, có thể dùng lệnh use để sử dụng các biến ở ngoài cha của nó.

<?php //f1.php
$usd = 5;
const TYGIA = 25000;
$tien = function() use ($usd){ 
    return $usd*TYGIA; 
};
echo $tien();

Dùng hàm anonymous trong các hàm cần callback

Callback là hàm được gọi bởi 1 hàm khác (hàm chính) trong luồng xử lý của hàm chính.  Một số hàm trong php có dùng tới callback như array_map, array_filter, preg_replace_callback…

<?php //f1.php
$binhphuong = function($x) { return $x*$x ; };
$arr = [2,4,3,5, 7, 10];
$arrNew = array_map($binhphuong, $arr);
var_export($arrNew); // [4, 16, 9, 25, 49, 100]

Arrow Function

Arrow function – hàm mũi tên gần giống như hàm ẩn danh nhưng viết gọn hơn. Sử dụng để triển khai các function tính toán gọn nhẹ.

Cú pháp cơ bản để tạo hàm ẩn danh là fn (tham số) => biểu thức

Các đặc điểm của arrow function cũng giống như anonymous function, nhưng arrow function có thể dùng được các biến từ cha của nó mà không cần dùng lệnh use như anonymous function. Ngoài ra, trong arrow function cũng không cần dùng return (return tự động từ biểu thức được tính toán).

Trong ví dụ bên dưới, ham1 và ham2 là hoạt động giống nhau như viết khác nhau. Hàm ham1 viết theo kiểu arrow function, ham2 viết theo kiểu anonymous function.

<?php //f1.php
  $y = 1;
  $ham1 = fn($x) => $x + $y;
  $ham2 = function ($x) use ($y) { return $x + $y; };
  echo $ham1(9) , " ",  $ham2(9); // 10 10

Gọi hàm trong class

Với các hàm trong class có nhiều cách gọi khác nhau, linh động. bạn có thể tùy ý gọi. Xem các ví dụ sau nhé:

1. Gọi hàm thông qua cú pháp $obj->tenham()

<?php //f1.php
class hocsinh {
   function hoten() {echo "<h3>Hàm họ tên </h3>"; }
}
$hs1 = new hocsinh; $hs1->hoten(); //Hàm họ tên

2. Gọi hàm qua cú pháp $obj->$biến()

<?php //f1.php
class hocsinh {
  function hocluc() {echo "<h3>Hàm này là học lực </h3>"; }   
}
$hs1 = new hocsinh; 
$ht = 'hocluc'; 
$hs1->$ht(); // Hàm này là học lực

3. Gọi hàm dùng cú pháp [ $obj, ‘tênhàm’]()

<?php //f1.php
class hocsinh {
   function hoten() {echo "<h3>Hàm họ tên </h3>"; }   
}
$hs1 = new hocsinh; 
[$hs1, 'hoten'](); //Hàm họ tên

4. Gọi hàm với cú pháp [ $obj, $biến]()

<?php //f1.php
class hocsinh {
   function hocluc() { echo "<h3>Hàm này là học lực </h3>"; }   
}
$hs1 = new hocsinh;  
$hl= 'hocluc'; 
[$hs1, $hl](); //Hàm này là học lực

5. Gọi hàm static dùng cú pháp tênclass::hàm()

<?php //f1.php
class hocsinh {
   static function tuoi() { echo "<h3>Hàm tuổi, static nha </h3>"; }
}
hocsinh::tuoi(); //Hàm tuổi, static nha

6. Gọi hàm static dùng cú pháp $biến::$biến()

<?php //f1.php
class hocsinh {
   static function dtb() {echo "<h3>Đây là hàm DTB, static nhe </h3>"; }
}
$class = 'hocsinh'; $ham = 'dtb'; 
$class::$ham(); //Đây là hàm DTB, static nhe

7. Gọi hàm static thông qua cú pháp [tênclass::class, tênhàm]()

?php //f1.php
class hocsinh {
   static function hanhkiem() {echo "<h3>Hạnh kiểm , static đó </h3>"; }   
}
[hocsinh::class, 'hanhkiem']();//Hạnh kiểm , static đó

Tham khảo nữa không? 🙂 Muốn coi thì vào các link sau: