-
PHP va` OOP
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