Saturday, September 8, 2007

Hàm

Đây là một trong những thuận lợi nhất trong phát triển ứng dụng. Các hàm cho phép bạn phát triển việc sử dụng lại và dễ dàng chỉnh sửa các thành phần mà thật sự hữu ích khi bạn phát triển các ứng dụng Web tương tự như trong quan niệm và tiện ích. Các kết quả của hàm rất ngắn gọn, dễ hiểu và dễ đọc.
Vậy hàm là gì?
Hàm là một đoạn các mã lệnh với một mục đích cụ thể và phải được gán một tên duy nhất. Tên hàm có thể được gọi tại bất kỳ đâu trong chương trình, cho phép các đoạn mã thể hiện bởi tên của nó được thực hiện lặp lại khi cần thiết. Đây là một thuận lợi bởi cùng một đoạn mã lệnh chỉ được viết một lần nhưng có thể được chỉnh sửa dễ dàng khi cần thiết.
Tạo một hàm PHP là một quá trình đơn giản. Bạn có thể tạo một hàm tại bất kỳ nơi nào trong chương trình PHP. Tuy nhiên, cho mục đích tổ chức bạn có thể thấy rằng sự thuận lợi khi đặt tất cả các hàm được dự định sẽ sử dụng trong script tại đầu mỗi file script. Một phương thức khác cho việc tổ chức hàm mà có thể giảm đi sự dư thừa đáng kể và tăng việc sử dụng lại là đặt các hàm trong những file riêng rẽ( được xem như là một thư viện). Điều này là thuận lợi bởi bạn có thể dùng các hàm lặp đi lặp lại trong những ứng dụng khác nhau mà không tạo ra các việc copy dư thừa và do đó giảm bớt các nguy cơ gây lỗi do việc viết lại.
Một hàm thường bao gồm ba phần phân biệt:
+ Tên của hàm.
+ Cặp dấu ngoặc ( ) chứa các tham số tuỳ chọn nhập vào.
+ Phần thân của hàm,nằm trong cặp dấu { }.
Ví dụ khai báo một hàm sau:
function display_copyright($site_name) {

print "Copyright © 2000 $site_name. All Rights Reserved.";

}
Các hàm lồng nhau:
Các hàm có thể lồng nhau. Điều này thật sự hữu ích cho các chương trình lớn và nhỏ, khi nó thêm vào một mức độ modul hoá khác vào trong ứng dụng, kết quả sẽ tăng lên đáng kể trong việc quản lý mã.
Quay lại với ví dụ display_copyright ở trên, bạn có thể giới hạn nhu cầu chỉnh sửa ngày tháng cùng với việc dùng một hàm lồng định nghĩa trước của PHP trong hàm display_copyright():
function display_copyright($site_name) {

print "Copyright ©". date("Y"). " $site_name. All Rights Reserved.";

}
Bạn cũng có thể lồng các khai báo hàm trong một hàm khác. Tuy nhiên, việc lồng một khai báo hàm không ngụ ý rằng nó sẽ được bảo vệ trong phạm vi giới hạn mà nó được khai báo. Hơn thế nữa, một hàm được lồng vào không thừa kế các tham số nhập vào của “cha mẹ” nó, các tham số phải được chuyển sang hàm được lồng chỉ khi chúng được chuyển sang hàm khác. Tuy nhiên, việc lồng các khai báo hàm là thật sự hữu ích cho các lý do quản lý mã và đảm bảo sự rõ ràng của tổ chức mã.
Ví dụ:
function display_footer($site_name) {

function display_copyright($site_name) {

print "Copyright © ". date("Y"). " $site_name. All Rights Reserved.";

}

print "


home recipes events


tutorials about contact us
";

display_copyright($site_name);

print "
";

}

$site_name = "PHP Recipes";

display_footer($site_name);
Sau khi thực hiện,đoạn script trên sẽ cho kết quả như sau:
home recipes events

tutorials about contact us
Các hàm lồng nhau trong PHP không được bảo vệ bởi việc được gọi từ bất kỳ đoạn script nào trong chương trình, nhưng chúng không thể được gọi lại cho đến sau khi các hàm cha mẹ được gọi. Việc gọi thử một hàm lồng trước khi gọi hàm cha mẹ của nó sẽ sinh ra một thông báo lỗi.
Các giá trị trả về từ một hàm:
Việc trả về một giá trị từ hàm là rất hữu ích, nó được thực hiện bằng cách gán giá trị gọi hàm cho một biến. Bất kỳ kiểu dữ liệu nào cũng được trả về từ một hàm bao gồm cả kiểu mảng và danh sách.
Ví dụ: xây dựng một hàm tính thuế bán hàng
$price = 24.99;

$tax = .06;

function calculate_cost($tax, $price) {

$sales_tax = $tax;

return $price + ($price * $sales_tax);

}

// chú ý cách calculate_cost() trả lại một giá trị

$total_cost = calculate_cost ($tax, $price);

// làm tròn biến $total_cost có 2 dấu chấm thập phân.

$total_cost = round($total_cost, 2);

print "Total cost: ".$total_cost;

// $total_cost = 26.49
Hàm đệ quy:
Hoạt động của một hàm gọi lại bản thân chính nó nhiều lần để thoả mãn một vài phép toán thật sự là một sức mạnh. Nếu được sử dụng một cách đúng đắn, các việc gọi hàm đệ quy có thể tiết kiệm được khoảng trống không đáng và dư thừa trong một script và đặc biệt hữu ích cho việc thực hiện các thủ tục lặp đi lặp lại.
Ví dụ sử dụng một hàm lặp đệ quy để tính một tập hợp các số integer.
function summation ($count) {

if ($count != 0) :

return $count + summation($count− 1);

endif;

}

$sum = summation(10);

print "Summation = $sum";
Kết quả của đoạn mã trên sẽ là Summation=55
Sử dụng hàm đệ quy có thể cải thiện tốc độ trong một chương trình nếu hàm được gọi đủ thường xuyên.Tuy nhiên,phải cẩn thận khi viết các thủ tục đệ quy ,nếu mã không đúng sẽ dẫn đến việc lặp không dừng được.Các hàm có thể thay đổi:
Khả năng thú vị của PHP là có thể thực hiện các hàm có thể biến đổi được. Một hàm có khả năng thay đổi là một lời gọi “động” đến hàm mà tên của nó được xác định tại thời điểm thực thi. Mặc dầu không thật sự cần thiết trong hầu hết các ứng dụng Web, nhưng các hàm có thể thay đổi có thể giảm kích thước mã và độ phức tạp một cách đáng kể, thông thường loại bỏ các câu lệnh điều kiện if không cần thiết.
Ta có thể gọi hàm có thể thay đổi được bằng cách gọi tên một biến theo sau là tập các dấu ngoặc đơn( ). Trong dấu ngoặc đơn đó là tập các tham số tuỳ chọn nhập vào. Hình thức thông thường của một hàm có thể thay đổi như sau: $function_name();
Ví dụ :sử dụng hàm có thể thay đổi để xác định các biến nhập vào.
//thông điệp chào tiếng Italia

function italian() {

print "Benvenuti al PHP Recipes.";

}

// thông điệp chào tiếng Anh

function english() {

print "Welcome to PHP Recipes.";

}

// gán ngôn ngữ dùng là tiếng Italia

$language = "italian";

//thực thi hàm có thể thay đổi được.

$language();
Xây dựng các thư viện hàm:
Các thư viện hàm là một trong những cách hữu ích để tiết kiệm thời gian khi xây dựng các ứng dụng. Ví dụ, bạn có thể viết một loạt các hàm cho việc sắp xếp các mảng. Bạn có thể sử dụng lại các hàm này trong các ứng dụng khác nhau. Hơn là việc thường xuyên viết lại hay copy và dán các hàm này vào các script mới, nó thật sự tiện lợi khi đặt tất cả các hàm liên quan đến việc sắp xếp trong cùng một file phân biệt. File này sẽ chứa các tiêu đề dễ dàng nhận ra,chẳng hạn như array_sorting.inc. Ví dụ như sau:

Hàm thư viện array_sorting.inc này sẽ hoạt động như là một chỗ chứa cho tất cả các hàm sắp xếp mảng. Điều này thật sự hữu ích bởi bạn có thể tổ chức các hàm một cách hiệu quả theo mục đích cho phép dễ dàng tìm kiếm khi cần thiết. Một khi bạn xây dựng cho chính mình một thư viện hàm, bạn có thể sử dụng các câu lệnh include() và require() của PHP để chứa toàn bộ các file thư viện vào trong một script do đó làm cho tất cả các hàm đều có sẵn. Cú pháp chung của hai câu lệnh này như sau:
include(path/filename);

require(path/filename);
hay cũng có thể như sau:
include "path/filename";

require "path/filename";

"path":đường dẫn tuyệt đối hay tương đối của filename.
Giả sử bạn muốn dùng thư viện array_sorting.inc trong một script.Bạn có thể dễ dàng thực hiện như sau:
include ("array_sorting.inc");
Bây giờ thì bạn có thể dễ dàng sử dụng bất kỳ hàm nào trong array_sorting.inc
$some_array = (50, 42, 35, 46);

//sử dụng phương pháp sắp xếp bubble_sort( )

$sorted_array = bubble_sort($some_array, 1);

No comments: