anhsam
08-26-2005, 08:44 PM
Vào đầu những năm 90, những complier phổ biến nhất như h? Borland đã bổ sung khả năng xử lý lập trình hướng đối tượng ( OOP ). Ngay lập tức lớp ( class ) đối tượng (objects) , thừa kế ( inheritance ) , template trở thành những từ thông dụng, những chủ đ? nóng b?ng trong phát triển phần m?m. OOP đã trở thành một thứ tân th?i và rất nhi?u công ty đã ngả theo khuynh hướng OOP bằng cách convert tất cả các gói sản phẩm của h? từ procedural ( thủ tục ) sang những ứng dụng có n?n tảng hướng đối tượng. Ngày nay sự thổi phồng OOP đã xẹp xuống nhưng một ngôn ngữ không thể xử lý với các đối tượng vẫn bị nhìn nhận là lỗi th?i. PHP có hỗ trợ lập trình hướng đối tượng, đơn giản vì nó tân th?i hay đó là sức mạnh thật sự?
Thực sự thì OOP có phải là công nghệ mới và sẽ thay thế phong cách lập trình với thủ tục truy?n thống. Nó còn phụ thuộc vào mục tiêu và xu hướng phát triển phần m?m của bạn. PHP hỗ trợ object nhưng theo một cách rất đặc biệt, nó liên quan đến việc quản lý các biến của bộ thông dịch.
Bất cứ khi nào PHP gặp tình huống cần thiết phải truy cập và ghi biến , nó đánh giá và tính toán dữ liệu sẽ được ghi vào biến, sao chép nó rồi gán kết quả vào không gian trong bộ nhớ.
$some_var =2;
$my_var =$some_var *3;
$new_var =$some_var +$my_var;
Trong trư?ng hợp này, PHP sẽ
- Tạo không gian nhớ cho $some_var và ghi 2 vào đó
- Tạo không gian nhớ cho $my_var, nhận giá trị của $some_var, nhân 3 và gán vào vùng nhớ vừa được cấp phát
- Tạo không gian nhớ cho $new_var, nhận giá trị của $some_var và $my_var, cộng chúng lại, rồi ghi vào bộ nhớ
?i?u này có vẻ quá đơn giản, nhưng qua đó bạn sẽ thấy sự khác biệt khi PHP làm việc với lớp
class my_class
{
var $var1,$var2,$var3;
}
$my_object =new my_class;
$my_object->var1 =1;
$my_object->var2 =2;
$my_object->var3 =3;
$new_object =$my_object;
$new_object->var1 =3;
$new_object->var2 =2;
$new_object->var3 =1;
print(“My object goes $my_object->var1,$my_object->var2,$my_object->var3 !<br>?);
print(“New object goes $new_object->var1,$new_object->var2,$new_object->var3 !<br>?);
?oạn mã khai báo một lớp, tạo một thể hiện ( đối tượng ) của nó, gán các giá trị cho 3 tính chất của đối tượng. Sau đó nó tạo ra một tham chiếu ( reference ) tới đối tượng này, gán lại các thuộc tính, rồi in ra các thuộc tính của cả 2 tham chiếu và nhớ là chúng ta chỉ có một thể hiện
?ây là kết quả
My object goes 1,2,3 !
My object goes 3,2,1 !
Nếu đến đây bạn không cảm thấy ngạc nhiên thì hoặc bạn đã biết nhi?u v? PHP hoặc bạn chả biết gì v? OOP cả ( đừng buồn nhé ) . Thực ra PHP đã tạo một bản sao , một thể hiện của my_class thay vì chỉ tạo một tham chiếu đến nó. ?ây không phải là cách cư xử mà chúng ta ch? đợi, vì lệnh new được cho là tạo ra một thể hiện của my_class trong bộ nhớ, trả v? tham chiếu đến nó. Chính vì vậy khi gán tham chiếu này cho biến khác, chỉ tham chiếu được sao chép và chỉ thế thôi. Còn cách xử sự cuả PHP – tạo bản sao thay vì tham chiếu đến nó có vẻ không quan tr?ng để ta lưu tâm, nhưng bạn sẽ thấy sự khác biệt trong những phần sau, tôi sẽ cố gắng trình bày thêm trong khả năng có thể.
Tham khảo: Web app Dev with PHP 4.0
Thực sự thì OOP có phải là công nghệ mới và sẽ thay thế phong cách lập trình với thủ tục truy?n thống. Nó còn phụ thuộc vào mục tiêu và xu hướng phát triển phần m?m của bạn. PHP hỗ trợ object nhưng theo một cách rất đặc biệt, nó liên quan đến việc quản lý các biến của bộ thông dịch.
Bất cứ khi nào PHP gặp tình huống cần thiết phải truy cập và ghi biến , nó đánh giá và tính toán dữ liệu sẽ được ghi vào biến, sao chép nó rồi gán kết quả vào không gian trong bộ nhớ.
$some_var =2;
$my_var =$some_var *3;
$new_var =$some_var +$my_var;
Trong trư?ng hợp này, PHP sẽ
- Tạo không gian nhớ cho $some_var và ghi 2 vào đó
- Tạo không gian nhớ cho $my_var, nhận giá trị của $some_var, nhân 3 và gán vào vùng nhớ vừa được cấp phát
- Tạo không gian nhớ cho $new_var, nhận giá trị của $some_var và $my_var, cộng chúng lại, rồi ghi vào bộ nhớ
?i?u này có vẻ quá đơn giản, nhưng qua đó bạn sẽ thấy sự khác biệt khi PHP làm việc với lớp
class my_class
{
var $var1,$var2,$var3;
}
$my_object =new my_class;
$my_object->var1 =1;
$my_object->var2 =2;
$my_object->var3 =3;
$new_object =$my_object;
$new_object->var1 =3;
$new_object->var2 =2;
$new_object->var3 =1;
print(“My object goes $my_object->var1,$my_object->var2,$my_object->var3 !<br>?);
print(“New object goes $new_object->var1,$new_object->var2,$new_object->var3 !<br>?);
?oạn mã khai báo một lớp, tạo một thể hiện ( đối tượng ) của nó, gán các giá trị cho 3 tính chất của đối tượng. Sau đó nó tạo ra một tham chiếu ( reference ) tới đối tượng này, gán lại các thuộc tính, rồi in ra các thuộc tính của cả 2 tham chiếu và nhớ là chúng ta chỉ có một thể hiện
?ây là kết quả
My object goes 1,2,3 !
My object goes 3,2,1 !
Nếu đến đây bạn không cảm thấy ngạc nhiên thì hoặc bạn đã biết nhi?u v? PHP hoặc bạn chả biết gì v? OOP cả ( đừng buồn nhé ) . Thực ra PHP đã tạo một bản sao , một thể hiện của my_class thay vì chỉ tạo một tham chiếu đến nó. ?ây không phải là cách cư xử mà chúng ta ch? đợi, vì lệnh new được cho là tạo ra một thể hiện của my_class trong bộ nhớ, trả v? tham chiếu đến nó. Chính vì vậy khi gán tham chiếu này cho biến khác, chỉ tham chiếu được sao chép và chỉ thế thôi. Còn cách xử sự cuả PHP – tạo bản sao thay vì tham chiếu đến nó có vẻ không quan tr?ng để ta lưu tâm, nhưng bạn sẽ thấy sự khác biệt trong những phần sau, tôi sẽ cố gắng trình bày thêm trong khả năng có thể.
Tham khảo: Web app Dev with PHP 4.0