Mô hình hướng đối tượng là một khái niệm tuyệt vời. Nó có rất nhiều lợi điểm, mà đáng chú ý nhất là khả năng dùng lại mã dễ dàng. Tuy nhiê, theo như chúng ta được hiểu: PHP không phải là một ngôn ngữ HĐT.
Mặc dù PHP có một sự hỗ trợ đầy đủ về HĐT, nó không hiệu quả lẫn không khôn ngoan nếu dùng tính năng HĐT của nó khi bạn có các hàm khác để đạt được cùng kết quả. Lí do là sự hỗ trợ HĐT của PHP không được phát triển mạnh.
Trong khi có hầu hết các phần tử chính yếu, PHP vẫn còn thiếu vài tính năng cao cấp (như các khái niệm protected, private) mà một ngôn ngữ HĐT thực sự (thí dụ như C++ , Java) phải có.
Các mã hỗ trợ HĐT của PHP không được tinh chỉnh và cũng không hiệu quả. Nghĩa là nếu bạn dùng mô hình HĐT trong PHP, bạn có thể làm chậm chương trình đáng kể.
Nói chung, một ứng dụng dùng HĐT sẽ chậm đi, cũng như là bạn dùng eval() thì sẽ chậm hơn là dùng mã bình thường. Để minh hoạ đầy đủ hơn việc HĐT có gì đó không tốt, tôi đã từng phải dùng những tính năng và khái niệm cao cấp của PHP, một vài trong số đó thậm chí chưa có tài liệu chỉ dẫn.
1. Chúng ta có thể làm gì mà không cần HĐT?
Nếu bạn chuyển sang PHP từ các ngôn ngữ như Java hay C++ (nơi bạn bạn thực sự không thể tạo các chương trình phức tạp mà không dùng các tính năng HĐT), việc bỏ qua khả năng HĐT của PHP có thể sẽ khó khăn. Dù sao, tôi vẫn có thể trấn an bạn là các chương trình rất mạnh có thể được viết mà không dùng mất cứ khái niệm và mô hình HĐT nào (PHP được viết bằng C, ngôn ngữ không hỗ trợ HĐT).
Để dành cho những ai không quen với kĩ năng phi-HĐT, dưới đây là vài kĩ thuật để tạo chương trình có tính kết dính và dễ mở rộng mà không dùng mô hình HĐT:
* Tạo một API
* Tạo một trình tự tên
* Nhóm các hàm liên quan vào một tập tin
1.1. Tạo một API
Áp dụng 3 lớp cho chương trình của bạn:
Thứ nhất, các hàm thực sự thực hiện công việc của bạn
Thứ hai, một hàm API. Đây là hàm giúp bạn xây dựng các chương trình đặc thù
Chương trình
MortgageRate.php
Mã lệnh (PHP)
<?php
// The internal functions are layer 1
// Internal function to calculate the correct
// interest rate to be used given the amount per month
// and the time it is to be paid in
function _mort_find_interest_rate ($total)
{
if ($total < 30000)
return (7.4);
elseif ($total > 30000)
return (3.2);
elseif ($total > 50000)
return (2.5);
else
return (1.7);
}
// The API is layer 2
// double calculate_mortgage_rate (int money, int time, int month)
// Calculate the mortgage rate given the
// the total money, time its paid over and
// the intervals
function calculate_mortgage_rate ($money, $time, $month)
{
$rate = _mort_find_interest_rate ($money) / 100;
$money /= ($time / $month);
return ($rate * $money) + $money;
}
?>
CalcMortgage.php
Mã lệnh (PHP)
<?php
// The actual application is layer 3
// $money, $time and $period are submitted
// from a form
include_once 'MortgageRate.php';
$price = calculate_mortgage_rate ($money, $time, $period);
print "Your $period month cost is $price";
?>
1.2. Tạo một trình tự tên và luôn tuân thủ
Một trong những vấn đề chính trong bất cứ một dự án lớn nào là sự xung đột về tên. Các lớp có thể phân đoạn tên. Do đó, các lớp khác nhau có thể:
Được gán một thuộc tính với tên giống nhau
Chứa các phương thức với tên giống nhau
Thí dụ, lớp Phillips và lớp Normal có thể cùng có phương thức tên screwdriver.
Nói chung, trước khi bắt đầu một dự án lớn nào, bạn nên có một trình tự tên cho mọi thứ, cụ thể là cách bạn tách các biến toàn cục ra các biến thông thường, cách định nghĩa hàm trong thư viện v.v.
1.3. Nhóm các ý niệm chung vào một tập tin
Nhóm các hàm API tương tự vào chung một tập tin cũng giống như nhóm các phương thức tương tự vào một lớp. Cố gắng tưởng tượng mỗi tập tin bạn tạo là một lớp, mỗi hàm trong đó là một phương thức. Bằng cách này, các hàm của bạn sẽ có định nghĩa và cấu trúc sáng sủa.
Thí dụ, bạn có thể muốn nhóm mọi hàm liên quan đến truy cập CSDL vào một tập tin DB.php.
2. HĐT, giống mọi thứ, tốt khi có điều độ
Để tôi làm sáng tỏ một việc. Tôi không phải đang cố biện hộ để bạn từ bỏ hẳn HĐT trong PHP. Đúng ra, tôi chỉ đang cố cảnh báo bạn đừng nên dùng PHP như Java hay C++, nơi mà HĐT có thể dùng thoải mái.
Hãy cẩn thận đánh giá lợi và hại trước khi bạn dùng một tiếp cận HĐT với PHP.
Nguồn http://zensoft.vn/showArticle.aspx?ID=10684