Tổng quan về hàm - cách định nghĩa và gọi hàm trong php


tự học php cơ bản 21/06/2015 Cùng chuyên mục

Hàm (function) là một dạng chương trình con, dùng để gom các câu lệnh lại thành một nhóm: chúng cùng thực hiện 1 yêu cầu chung, chúng được thực hiện đi thực hiện lại; hàm còn giúp tổ chức chương trình cho sáng sủa - dễ hiểu - dễ quản lý.

Trong PHP có 2 loại hàm:
- Hàm chuẩn (hàm sẵn có của hệ thống)
- hàm do người dùng định nghĩa

Hàm là gì?

Hàm là một dạng chương trình con, dùng để gom các câu lệnh lại thành một nhóm: chúng cùng thực hiện 1 yêu cầu chung, chúng được thực hiện đi thực hiện lại; hàm còn giúp tổ chức chương trình cho sáng sủa - dễ hiểu - dễ quản lý. 
Để gọi hàm, sử dụng hình thức sau:

function_name(arg1, arg2, arg3,..., argn);

Trong đó: 
- function_name: tên hàm
- arg1...argn là các tham trị hoặc tham chiếu được truyền vào.

Lưu ý:
 trước các arg1..argn, arg hay còn gọi la argument, không đặt các từ khóa để định kiểu như int, string,... ( khác với C), biến trong php rất linh hoạt có thể nhận các kiểu dữ liệu bất kỳ. Trong trường hợp cần sử dụng cho chính xác kiểu dữ liệu hãy sử dụng dạng ép kiểu 

Ví dụ 1: 
Xuất ra chiều dài chuỗi "abc" bằng hàm có sắn trong php (hàm strlen)

// hàm strlen: tính chiều dài của chuỗi, đối số nhận vào là 1 chuỗi
$length  = strlen("abc");
echo $length; // kết quả sẽ là 3

Làm việc với hàm, chúng ta cần quan tâm:
- Tên hàm // phải gõ chính xác, phải nhớ (một cách tương đối vì các editor có chức năng autocomplete) 
- Công dụng hay ý nghĩa, cách sử dụng của hàm
- Kiểu dữ liệu của các đối số truyền vào, vị trí các đối số
- Giá trị trả ra (return value )

Nếu bạn không biết được giá trị trả ra khi thực hiện có thể gây lỗi. Ví dụ, hàm trả ra một mảng mà sử dụng hàm echo() để xuất kết quả sẽ báo lỗi. 

Bạn có thể tìm kiếm thông tin các hàm có sẵn ( hàm chuẩn của hệ thống) ở đâu?
php.net là trang web chính thức để bạn tra cứu thông tin.
Ngoài ra, một số hàm thuộc một thư viện (library hay driver) - nó là một extension, cần phải được bật trước khi sử dụng, bạn cũng cần lưu ý đến verson của library - version của php (vì mỗi phiên bản có một số thay đổi ).

Ví dụ 2: Cú pháp hàm strlen()

int strlen(string $str)

Trong đó:

  • Tên hàm: strlen //bạn có thể đọc string length hay string len cho dễ nhớ.
  • Công dụng: tính chiều dài của chuỗi truyền vào
  • Đối số nhận vào: $str - kiểu string ( chuỗi )
  • Gía trị trả về ( return value ):  int, một số nguyên là chiều dài chuỗi

Hàm do người dùng định nghĩa:

Mặc dù php có một số lượng rất lớn các hàm (trên 700) nhưng trong các điều kiện thực tế chúng ta phải tự định nghĩa một hàm mới. Để định nghĩa một hàm, sử dụng cú pháp sau:

function function_name(arg1, arg2, arg3,..., argn)
{
     //code = body function
}

Trong đó function_name phải đặt theo các quy tắc sau:
- Không được trùng với các từ khóa như function, public,..., tên hàm đã có như strlen
- Theo quy tắc đặt tên biến

Ví dụ 3: Định nghĩa hàm tính bình phương một số.

function square($x)
{
	//kiểm tra xem đối số nhận vào có phải là một số 
	if(!is_numeric($x))
	{
		return "Lỗi! $x không phải là một số";
	}       
	return $x*$x;
}
echo square(2); //kết quả 4

Trong đó, từ khóa function để định nghĩa một hàm, từ khóa return để trả ra kết quả. Bạn có thể sử dụng hàm khác (cả hàm mới định nghĩa lẫn hàm có sẵn) trong hàm của mình.

Ví dụ 4: Định nghĩa hàm chieu_dai_chuoi() nhận vào 1 chuỗi và xuất ra thông báo 'chiều dài chuỗi là...'

//hàm lấy xuất chiều dài chuỗi
function chieu_dai_chuoi($ch)
{
	echo "Chiều dài chuỗi: ".strlen($ch);
}
//hàm xuất ra thông tin chuỗi
function get_str_info($ch)
{
	echo "Nội dung chuỗi: $ch
"; //gọi hàm chieu_dai_chuoi(), vừa định nghĩa ở trên chieu_dai_chuoi($ch); } $ch = "Tôi là Nam"; chieu_dai_chuoi($ch); get_str_info($ch); $ch = 157814; //ép kiểu cho biến $ch get_str_info((string)$ch);

Trong đó, strlen() là hàm có sẵn. 

Gán giá trị của hàm cho biến

Sử dụng y như việc gán giá trị cho biến.
Ví dụ 5: Gán giá trị của hàm cho biến - tính chiều dài chuỗi

//gán giá trị lấy được từ hàm strlen() cho biến $a
$a = strlen("abc");
echo "Chiều dài chuỗi 'abc' : $a";

Tầm vực biến:

PHP không hỗ trợ biến toàn cục một cách chi tiết - nếu muốn làm việc với biến toàn cục, bạn cần phải thông qua mảng $GLOBALS[]

Có 2 kiểu truyền giá trị cho hàm là: truyền tham trị và truyền tham chiếu.

Thế nào là truyền tham trị?

Nghĩa là gửi "giá trị" cho hàm, có thể truyền thẳng bằng giá trị trực tiếp hoặc truyền 1 biến - sau khi thực hiện các câu lệnh trong thân hàm-giá trị của biến không thay đổi.

Thế là là truyền tham chiếu?

Nghĩa là gửi "địa chỉ" của biến cho hàm, khi hàm sẽ lấy giá trị của biến gửi vào thông qua địa chỉ gửi vào, sau khi thực hiện các lệnh trong thân hàm thì giá trị của biến sẽ thay đổi.

Bạn cần nắm rõ 2 khái niệm trên để tránh nhầm lẫn khi sử dụng. Sử dụng tham chiếu với mong muốn giá trị của biến sẽ thay đổi - sử dụng tham trị thì thường dùng để trả ra các thông tin dạng truy xuất. 

Truyền tham trị:

Với kiểu truyền tham trị, biến chỉ có giá trị trong thân hàm.
Ví dụ 6: Truyền tham trị cho hàm

function test_var_scope()
{
   $var = 2;
}
$var = 1;
test_var_scope();
echo $var; 
//kết quả 1 - vì giá trị của biến $var không thay đổi giá trị ngoài thân hàm,
nó chỉ có phạm vi trong thân hàm.

Sử dụng mảng $GLOBALS[], để tạo các biến toàn cục:

function test_var_scope()
{
   $GLOBALS["var"] = 2;
}
$var = 1;
test_var_scope();
echo $var; //kết quả 2

Truyền tham chiếu:

Khi truyền tham chiếu, giá trị của biến trong thân hàm thay đổi thì giá trị của biến ngoài thân hàm cũng thay đổi. Thường thì ta sử dụng truyền tham chiếu khi muốn trả ra nhiều giá trị (thông thường lệnh return chỉ trả ra 1 giá trị - với php bạn có thể trả ra kết quả của hàm ở dạng mảng [vì mảng trong php - các phần tử có thể nhận kiểu dữ liệu khác nhau, do đó mỗi phần tử của mảng là một giá trị xuất cần xuất ra] ) - hoặc biến được sử dụng với ý nghĩa toàn cục (thay đổi giá trị sau khi được gọi hàm) hoặc được dùng kết hợp 2 trường hợp trên.

Ví dụ 7: Khai báo hàm tính bình phương 1 số và truyền tham chiếu

function square(&$x)
{
    $x = $x*$x;
}
$x = 3;
square($x);
echo $x; // kết quả 9.

GIÁ TRỊ MẶC ĐỊNH:

Đôi khi người ta sử dụng hàm mà quên không truyền giá trị và việc truyền giá trị không phải là bắt buộc, để tránh lỗi xảy ra hoặc để dùng cho một mục đích khác (ví dụ trả ra một kết quả mặc định thì xuất thông báo cảnh báo) - sử dụng giá trị mặc định giúp cho việc tránh lỗi.

Định nghĩa giá trị mặc định:

arg = value; //value là một hằng số.

Ví dụ 8: Định nghĩa hàm square() - tính bình phương - giá trị mặc định bằng 0

function square($x = 0)
{
   return $x*$x;
}
echo square(); 
/*kết quả là 0 - nghĩa là nếu không truyền tham số vào, mặc định đối số truyền vào nhận giá trị 0*/

TỔNG KẾT

Hàm là một phần quan trọng trong php - xuyên suốt trong quá trình làm việc với php - bạn cần phải nắm vững. Trong đó cần phải nhớ các đặc điểm:

  • Từ yêu cầu của mình, tìm hàm có công dụng tương ứng
  • Nhớ tên hàm (một cách tương đối, vì các editor có chức năng autocomplete)
  • Nhớ giá trị trả về của hàm (quan trọng)
  • Vị trí các đối số, kiểu giá trị của đối số (quan trọng)
  • Hàm tự định nghĩa hay đã có sẵn, thư viện liên quan (nếu có)

BÀI TẬP:

- Viết ( định nghĩa ) hàm tính tổng của dãy số tăng dần đều: S = 1+2+3+4+...+n
- Viết hàm tính chu vi hình chữ nhật, mặc định chiều dài = chiều rộng = 1 

Đáp Án
<?php
	/*sum_inc: ham tinh tong tang dan - doi so: so tu nhien n*/ 
	function sum_inc($n = 0)
	{
		if(!is_int($n) OR ($n < 1))
		{
			print "Đối số nhập vào không hợp lệ";
			exit;
		}
		$s = 0;
		for($i = 1; $i < ($n+1); $i++)
		{
			$s += $i;
		}
		return  $s;
	}
	function tinh_cv_hcn($dai = 1, $rong = 1)
	{
		if(!$dai OR !is_int($dai) OR !$rong OR !is_int($rong))
		{
			print "Đối số nhập vào không hợp lệ";
			exit;
		}
		else if($dai < $rong)
		{
			print "Đây ko phải HCN - nhưng vẫn tính chu vi";
		}
		$chu_vi = ($dai+$rong)*2;
		return $chu_vi;
	}
	$n = 3;
	print "Tổng của 1+2+..+$n = ".sum_inc($n)."<br>";
	$dai = 5;
	$rong = 3;
	print "HCN: chieu dai $dai - chieu rong $rong co chu vi: ".tinh_cv_hcn($dai, $rong)."<br>";
?>


Bài cùng chuyên mục:




Bình luận:


php