10/10/2018, 11:18
Lap trinh huong doi tuong trong PHP-CHi tiet!-De hieu
Lập trình hướng đối tượng (LTHDT),lập trình AGENT… là một kiểu lập trình phổ biến hiện nay và phổ biến ở hầu hết các ngôn ngữ cấp cao.Nay mình viết bài này nói đôi điều về LTHDT và cách sử dụng nó trong PHP .Thực ra mình chỉ coi PHP là ngôn ngữ tham khảo. Mình viết bài này trên góc độ lấy tư tưởng lập trình C mang sang PHP áp dụng và với những gì mình biết về LTHDT trong PHP.Có gì sai sót mong mọi người sủa chữa, bổ sung thêm.
Tại sao lại lập trình hướng đối tượng? Nếu không cần hướng đối tượng ta vẫn có thể lập trình ra 1 sản phẩm: phần mềm, 1 website nhưng sản phẩm lại thiếu vắng sự chuyên nghiệp, không mang tính hệ thống, khó cập nhật, và gây khó khăn cho người khác trong việc đọc code của mình(khi làm việc nhóm, trong cty...). Mình đưa ra một ví dụ thưc tế: Một chiếc ôtô có động cơ, khung, thùng xăng,bánh xe...Giả sử bạn đã có hết các bộ phận của chiếc ô tô đó, giờ muốn chạy xe bạn ráp chúng lại với nhau rất mệt, chạy xong bạn lại tháo hết ra cất đi, lần sau muốn chạy lại làm lại!!!-->đó giống như lập trình không đối tượng. Còn lập trình hướng đối tượng là bạn ráp chiếc xe lại chỉ một lần rồi cất đi, khi nào muốn dùng thì chỉ việc đổ xăng và leo lên chạy rồi khi không chạy nữa thì chỉ việc cất xe đi. Tư tưởng của mình muốn diễn đạt là vậy. Nếu bạn đã hiểu ý của mình thì chúng ta bắt đầu.
Trong PHP để LTHDT ta khai báo một class(lớp), class tương đương như cả chiếc ôtô mà mình đã nêu trên, trong class có các thuộc tính và phương thức(hàm nằm trong class) tương đương với các bộ phận của chiếc ôtô. Ta đi tạo class với các thuộc tính và phương thức làm sao cho chúng có liên hệ mật thiết với nhau giống như ta lắp ráp thành chiếc ôtô hòan chỉnh mà các bộ phận của ôtô cũng liên quan với nhau: có xăng xe mới nổ, xe nổ thì xi lanh hoạt động, đèn mới sáng, xe mới di chuyển được.
Ta khai báo class NGUOI như sau:
Trong class người trên mình khai báo 2 thuộc tính(biến) là hoten và tuoi để mô tả tên và tuổi của 1 người.Ban đầu ta mới chỉ khai báo, nó chưa có giá trị. Mình viết hàm dat_ten để cập nhật giá trị cho 2 thuộc tính đó sau khi hàm này được gọi.Lúc này $hoten ,$tuoi đã có giá trị. Ta có thể xuất giá trị của nó qua hai hàm lay_ten(), va lay_tuoi().Lưu ý mình viết bài này dành cho các bạn đã hiểu rõ về hàm và cách dùng hàm. Như vậy qua vd này ta đã hiểu ra rằng: Lớp có chứa các biến(t tính) và các phương thức(hàm trong lớp), các phương thức là công cụ để nhập, xuất giá trị cho thuộc tính và "chế biến" các thuộc tính này theo nhu cầu riêng của mỗi người.Ở trên mình mới chỉ viết hàm nhập xuất, chưa có chế biến gì cả.
Lưu ý giùm mình là class trên mình mới dạy cho nó là phải làm việc thế này, thế kia nhưng mình chưa có bắt nó làm gì nên nếu các bạn chạy sẽ k0 thấy gì cả.Để sử dụng 1 Class ta phải tạo một đối tượng cho nó theo cú pháp $ten_doi_tuong=new class(); trong đó $ten_doi_tuong bạn có thể coi là một cái biến(thực ra nó là biến con trỏ).Biến con trỏ này dùng để gọi các thuộc tính và hàm có trong lớp.Cách gọi như sau: $ten_doi_tuong->thuoc_tinh hoặc $ten_doi_tuong->ten_phuong_thuc(danh sách tham số). Ta đi vào thực tế luôn nhé:
Mình quên chưa nói về con trỏ $this, con trỏ this tồn tại trong chính lớp đang xây dựng dùng để gọi chính xác đến các thuộc tính và phương thức trong lớp làm cho nó trở nên toàn cục.Trong C,C# thì nó không wan trọng lắm nhưng trong PHP nó rất quan trọng.Mình lấy ví dụ trong hàm dat_ten($hoten1,$tuoi1) trên:
function dat_ten($hoten1,$tuoi1)
}
$this->hoten=$hoten1;
$this->tuoi=$tuoi1;
}
nếu ta ghi là :
function dat_ten($hoten1,$tuoi1)
}
$hoten=$hoten1;
$tuoi=$tuoi1;
}
thì $hoten và $tuoi trở thành 2 biến cục bộ (độc lập với hai thuộc tính $hoten, $tuoi ở trên)chỉ có giá trị nội bộ trong hàm. Hai thuộc tính của lớp sẽ ko dc gán giá trị.
2>Bây giờ mình viết thêm hàm "chế biến" thuộc tính và lớp trên và chạy lại, các bạn để ý kết quả để hiểu nhé:
Phần cuối của chuyên đề này mình nói thêm chút xíu về con trỏ.Trong C và C++,con trỏ là 1 chủ đề được đào rất sâu.Ta hiểu: biến con trỏ là biến lưu địa chỉ của ô nhớ trong bộ nhớ máy tính(Random Access Memory).Mỗi ô nhớ gồm có giá trị của biến ta lưu vào và địa chỉ của nó.Chỉ cần biết địa chỉ của ô nhớ, ta có thể truy xuất giá trị của ô nhớ đó.Con trỏ thường được dùng để cấp phát bộ nhớ động.
Chuyên đề 2: Khởi tạo và huỷ giá trị:
Ở class nguoi trên mình viết hàm dat_ten($hoten1,$tuoi1); để nhập giá trị cho các thuộc tính. Có cách nào chuyên nghiệp hơn không?PHP hỗ trợ sẵn cho chúng ta hàm khởi tạo chuyên làm chuyện đó. Và tất nhiên có luôn hàm huỷ dùng để xoá ô nhớ chứa gía trị của đối tương.Cú pháp như sau:
class ***
{
public function __construct(danh sách tham số)
{
Gán giá trị;
}
public function __destruct()
{
$this->thuộc tính;
..
}
}
Khi gọi đối tượng ta su dung như sau: $ten_doi_tuong=new lop(danh sach tham so). Mình viết lại class nguoi voi __construct() như sau:
Lưu ý: nếu ta ghi: $chay=new NGUOI(); thì giá trị mặc định là $hoten1="Tran Thanh Bi`nh",$tuoi1=19 trong hàm khởi tạo sẽ được gọi.
Chuyên đề 3: Phạm vi truy xuất:
Gồm các từ khoá public, private,protected. Nếu không ghi gì thì là public.Cái này trong PHP ko quan trọng bằng trong C nên mình chỉ nói ngắn gọn.
Các từ khoá trên đặt trước 1 thuộc tính, 1 phương thức. Nếu thuộc tính, phưong thức nào mang giá trị public thì nó được truy xuất tự do bên ngoài lớp và trong lớp.Nếu là private thì chỉ đc truy xuất trong chính lớp đó. Còn protected thì trong chính lớp đó và trong lớp thừa kế từ lớp đó.
Mình khuyên các bạn ban đầu chỉ nên dùng public, còn hai cái kia khi nào bạn đạt đến 1 trình độ nhất định thì sẽ tự biết khi nào thì dùng cái nào.Vd ta xây dựng lớp thành viên để quản lý thành viên,trong đó biến ID thành viên là không cần thiết xuất ra trình duyệt và đó là thông tin quan trong trong cơ sở dữ liệu nên ta khai báo nó ở dạng private để tránh sự thay đổi giá trị không mong muốn do sự sơ xuất trong lập trình.Cách dùng các khoá bạn xem trong VD sau:
Các bạn chú ý giùm mình là phương thức, thuộc tính protected trong lớp cơ sở chỉ được thừa kế trong nội bộ của lớp thừa kế, đo đó chỉ các hàm trong lớp TKế mới có quyền gọi chúng, còn đối tượng của lớp thừa kế thì không thể gọi các $ và hàm protected trong lớp cơ sở.
Chuyên đề 4: Thuộc tính hằng, thuộc tính tĩnh và phương thức tĩnh: Trong PHP, thuộc tính hằng, phương thức tĩnh và thuộc tính tĩnh tồn tại ngay cả khi chưa có đối tượng nào được gọi.Thuộc tính hằng dùng để tạo ra một hằng số và giá trị của nó không thể thay đổi. Còn thuộc tính và phương thức tĩnh tồn tại ngay sau khi nó được định nghĩa (nghĩa là không cần gọi lớp vẫn có thể dùng dc).Lưu ý: Phương thức tĩnh không được tác động và truy xuất đến các thuộc tính không tĩnh. Có thể truy xuất đến thuộc tính tĩnh.Có vẻ hơi trừu tượng, chúng ta hãy đi vào VD sau:
Như vậy để sử dụng hằng, thuộc tính tĩnh và phương thức tĩnh ta dùng cú pháp sau: tên_lớp::tên hằng/thuộc tính tĩnh/phương thưc tĩnh.Nếu muốn truy cập thuộc tính tĩnh hoăc hằng trong một hàm của chính lớp đó thì thay vì dùng $this-> ta có thể dùng self::tên hằng/thuộc tính tĩnh/phương thưc tĩnh. Khi nào thì dùng đến những thứ này?Trong một project web sẽ có lúc bạn phải dùng đến nó ví dụ như hàm kiểm tra sự chính xác của email, username nhập vào trước khi cho nó vào lớp…
Chuyên đề 5: Dẫn xuất, thừa kế, lớp cơ sở, chạy đè phương thức:
Nếu lớp B thừa kế từ lớp A thì lớp B gọi là lớp dẫn xuất, lớp A là lớp cơ sở.Lớp dẫn xuất có thể sử dụng tất cả các phương thức và thuộc tính public ,protected của lớp cơ sở.Khi nào thì cần dùng thừa kế? Khi lớp B sử dụng một số phương thức và ttính mà lớp A đã định nghĩa sẵn thì ta nên cho B thừa kế của A, chỉ khai báo trong B thêm những cái mới mà trong A không có.
Ví dụ: trên đây ta có class nguoi, giờ nếu ta khai báo class công nhân. Thì mỗi công nhân cũang phải có tên tuổi, mà hai yếu tố này ta đã khai báo, “xào nấu” sẵn trong class nguoi.Vậy thì ta hãy cho class cong_nhan thừa kế class nguoi đi, khỏi khai báo thêm chi cho mệt!!!
Để cho class cong_nhan thừa kế từ class nguoi ta theo cú pháp sau: class cong_nhan extends nguoi { …}
Trong lớp dẫn xuất mà muốn truy xuất giá trị của thuộc tính tĩnh, hằng trong lớp cơ sở ta dùng cú pháp parent:: tên hằng/thuộc tính tĩnh/phương thưc tĩnh.
Khi trong lớp dẫn xuất mà có phương thức trùng tên với phương thức trong lớp cơ sở thì sẽ ưu tiên chạy pthức trong lớp dẫn xuất gọi là chạy đè phương thức.Ví dụ đơn giản như trong lớp cơ sở có hàm *** dùng để đặt tên là “chó” nhưng trong lớp dẫn xuất cũng có hàm *** và hàm này lại đặt tên là “mèo”. vậy khi chạy thì kết quả sẽ là “mèo”.
Chuyên đề 6:Truy cập phương thức trong lớp cơ sở:
Trong lớp dẫn xuất, nếu ta muốn truy cập các phương thức (kể cả phương thức tĩnh) trong lớp cơ sở thì theo cú pháp: tên_lớp_csở::tên_hàm hoặc parent::tên_hàm.
Ở chuyên đề này mình sẽ tổng kết lại. Như vậy ở các chuyên đề trên mình đã đề cập đến các vấn đề xương sống của LTHDT, còn rất nhiều vấn đề khác liên quan đến LTHDT các bạn tìm hiểu thêm, mình không có thời gian để nói hết. PHP có hỗ trợ các hàm sẵn như:__ wakeup, __sleep,__toString, __get, __set…hoặc có các lớp viết sẵn dùng để tương tác với CSDL XML,DOM…Các vấn đề này thuộc về nâng cao. Mình sẽ đề cập trong bài viết sau.
So với việc học C, thì học PHP dễ hơn rất nhiều, nó tự động các công cụ từ A đến Z cho bạn.Tuy nhiên nó dẫn đến một hội chứng là: một người học PHP chuyển sang C thì khó thích nghi trong khi người đang học C mà học thêm PHP thì sẽ hiểu rất mau ngôn ngữ PHP. Ở góc độ mình thì mình cảm thấy như thế.
Bài viết này của mình!,Email: hero_8490@yahoo.com,SV khoa kinh tế-luật, ĐHQG TPHCM.
Tại sao lại lập trình hướng đối tượng? Nếu không cần hướng đối tượng ta vẫn có thể lập trình ra 1 sản phẩm: phần mềm, 1 website nhưng sản phẩm lại thiếu vắng sự chuyên nghiệp, không mang tính hệ thống, khó cập nhật, và gây khó khăn cho người khác trong việc đọc code của mình(khi làm việc nhóm, trong cty...). Mình đưa ra một ví dụ thưc tế: Một chiếc ôtô có động cơ, khung, thùng xăng,bánh xe...Giả sử bạn đã có hết các bộ phận của chiếc ô tô đó, giờ muốn chạy xe bạn ráp chúng lại với nhau rất mệt, chạy xong bạn lại tháo hết ra cất đi, lần sau muốn chạy lại làm lại!!!-->đó giống như lập trình không đối tượng. Còn lập trình hướng đối tượng là bạn ráp chiếc xe lại chỉ một lần rồi cất đi, khi nào muốn dùng thì chỉ việc đổ xăng và leo lên chạy rồi khi không chạy nữa thì chỉ việc cất xe đi. Tư tưởng của mình muốn diễn đạt là vậy. Nếu bạn đã hiểu ý của mình thì chúng ta bắt đầu.
Trong PHP để LTHDT ta khai báo một class(lớp), class tương đương như cả chiếc ôtô mà mình đã nêu trên, trong class có các thuộc tính và phương thức(hàm nằm trong class) tương đương với các bộ phận của chiếc ôtô. Ta đi tạo class với các thuộc tính và phương thức làm sao cho chúng có liên hệ mật thiết với nhau giống như ta lắp ráp thành chiếc ôtô hòan chỉnh mà các bộ phận của ôtô cũng liên quan với nhau: có xăng xe mới nổ, xe nổ thì xi lanh hoạt động, đèn mới sáng, xe mới di chuyển được.
Ta khai báo class NGUOI như sau:
PHP Code:
<?php
class NGUOI
{
var $hoten;
var $tuoi;
function dat_ten($hoten1,$tuoi1)
{
$this->hoten=$hoten1;
$this->tuoi=$tuoi1;
}
function lay_ten()
{
return $this->hoten;
}
function lay_tuoi()
{
return $this->tuoi;
}
}
?>
Lưu ý giùm mình là class trên mình mới dạy cho nó là phải làm việc thế này, thế kia nhưng mình chưa có bắt nó làm gì nên nếu các bạn chạy sẽ k0 thấy gì cả.Để sử dụng 1 Class ta phải tạo một đối tượng cho nó theo cú pháp $ten_doi_tuong=new class(); trong đó $ten_doi_tuong bạn có thể coi là một cái biến(thực ra nó là biến con trỏ).Biến con trỏ này dùng để gọi các thuộc tính và hàm có trong lớp.Cách gọi như sau: $ten_doi_tuong->thuoc_tinh hoặc $ten_doi_tuong->ten_phuong_thuc(danh sách tham số). Ta đi vào thực tế luôn nhé:
PHP Code:
<?php
class NGUOI
{
var $hoten;
var $tuoi;
function dat_ten($hoten1,$tuoi1)
{
$this->hoten=$hoten1;
$this->tuoi=$tuoi1;
}
function lay_ten()
{
return $this->hoten;
}
function lay_tuoi()
{
return $this->tuoi;
}
}
$chay=new NGUOI(); //tạo ra đối tượng $chay để thực thi lớp nguoi
$chay->dat_ten("Trần Thanh Bình",19); //nạp giá trị tên "Trần Thanh Bình" và tuổi "19" vào $hoten, $tuoi
echo $chay->lay_ten().$chay->lay_tuoi(); //Xuất tên và tuổi
?>
function dat_ten($hoten1,$tuoi1)
}
$this->hoten=$hoten1;
$this->tuoi=$tuoi1;
}
nếu ta ghi là :
function dat_ten($hoten1,$tuoi1)
}
$hoten=$hoten1;
$tuoi=$tuoi1;
}
thì $hoten và $tuoi trở thành 2 biến cục bộ (độc lập với hai thuộc tính $hoten, $tuoi ở trên)chỉ có giá trị nội bộ trong hàm. Hai thuộc tính của lớp sẽ ko dc gán giá trị.
2>Bây giờ mình viết thêm hàm "chế biến" thuộc tính và lớp trên và chạy lại, các bạn để ý kết quả để hiểu nhé:
PHP Code:
<?php
class NGUOI
{
var $hoten;
var $tuoi;
function dat_ten($hoten1,$tuoi1)
{
$this->hoten=$hoten1;
$this->tuoi=$tuoi1;
}
function lay_ten()
{
return $this->hoten;
}
function lay_tuoi()
{
return $this->tuoi;
}
function chebien()
{
$this->hoten="Tên tôi là: ".$this->hoten;
$this->tuoi++;
}
}
$chay=new NGUOI(); //tạo ra đối tượng $chay để thực thi lớp nguoi
$chay->dat_ten("Trần Thanh Bình",19); //nạp giá trị tên "Trần Thanh Bình" và tuổi "20" vào $hoten, $tuoi
$chay->chebien();
echo $chay->lay_ten().$chay->lay_tuoi(); //Xuất tên và tuổi
?>
Chuyên đề 2: Khởi tạo và huỷ giá trị:
Ở class nguoi trên mình viết hàm dat_ten($hoten1,$tuoi1); để nhập giá trị cho các thuộc tính. Có cách nào chuyên nghiệp hơn không?PHP hỗ trợ sẵn cho chúng ta hàm khởi tạo chuyên làm chuyện đó. Và tất nhiên có luôn hàm huỷ dùng để xoá ô nhớ chứa gía trị của đối tương.Cú pháp như sau:
class ***
{
public function __construct(danh sách tham số)
{
Gán giá trị;
}
public function __destruct()
{
$this->thuộc tính;
..
}
}
Khi gọi đối tượng ta su dung như sau: $ten_doi_tuong=new lop(danh sach tham so). Mình viết lại class nguoi voi __construct() như sau:
PHP Code:
<?php
class NGUOI
{
var $hoten;
var $tuoi;
public function __construct($hoten1="Tran Thanh Bi`nh",$tuoi1=19)
{
$this->hoten=$hoten1;
$this->tuoi=$tuoi1;
}
function lay_ten()
{
return $this->hoten;
}
function lay_tuoi()
{
return $this->tuoi;
}
function chebien()
{
$this->hoten="Tên tôi là: ".$this->hoten;
$this->tuoi++;
}
function __destruct()
{
$this->hoten;
$this->tuoi;
}
}
$chay=new NGUOI("hero_8490@yahoo",19); //tạo ra đối tượng $chay để thực thi lớp nguoi
$chay->chebien();
echo $chay->lay_ten().$chay->lay_tuoi(); //Xuất tên và tuổi
?>
Chuyên đề 3: Phạm vi truy xuất:
Gồm các từ khoá public, private,protected. Nếu không ghi gì thì là public.Cái này trong PHP ko quan trọng bằng trong C nên mình chỉ nói ngắn gọn.
Các từ khoá trên đặt trước 1 thuộc tính, 1 phương thức. Nếu thuộc tính, phưong thức nào mang giá trị public thì nó được truy xuất tự do bên ngoài lớp và trong lớp.Nếu là private thì chỉ đc truy xuất trong chính lớp đó. Còn protected thì trong chính lớp đó và trong lớp thừa kế từ lớp đó.
Mình khuyên các bạn ban đầu chỉ nên dùng public, còn hai cái kia khi nào bạn đạt đến 1 trình độ nhất định thì sẽ tự biết khi nào thì dùng cái nào.Vd ta xây dựng lớp thành viên để quản lý thành viên,trong đó biến ID thành viên là không cần thiết xuất ra trình duyệt và đó là thông tin quan trong trong cơ sở dữ liệu nên ta khai báo nó ở dạng private để tránh sự thay đổi giá trị không mong muốn do sự sơ xuất trong lập trình.Cách dùng các khoá bạn xem trong VD sau:
PHP Code:
<?php
/**
* Define MyClass
*/
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// We can redeclare the public and protected method, but not private
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; // Works
echo $obj2->private; // Undefined
echo $obj2->protected; // Fatal Error
$obj2->printHello(); // Shows Public, Show Protected2, not show Private
?>
Chuyên đề 4: Thuộc tính hằng, thuộc tính tĩnh và phương thức tĩnh: Trong PHP, thuộc tính hằng, phương thức tĩnh và thuộc tính tĩnh tồn tại ngay cả khi chưa có đối tượng nào được gọi.Thuộc tính hằng dùng để tạo ra một hằng số và giá trị của nó không thể thay đổi. Còn thuộc tính và phương thức tĩnh tồn tại ngay sau khi nó được định nghĩa (nghĩa là không cần gọi lớp vẫn có thể dùng dc).Lưu ý: Phương thức tĩnh không được tác động và truy xuất đến các thuộc tính không tĩnh. Có thể truy xuất đến thuộc tính tĩnh.Có vẻ hơi trừu tượng, chúng ta hãy đi vào VD sau:
PHP Code:
<?php
class NGUOI
{
var $hoten;
var $tuoi;
static $quoctich="vietnam";
const viet_nam="Dang cap";
function dat_ten($hoten1,$tuoi1)
{
$this->hoten=$hoten1;
$this->tuoi=$tuoi1;
}
function lay_ten()
{
return $this->hoten;
}
function lay_tuoi()
{
return $this->tuoi;
}
public static function vidu()
{
echo self::$quoctich.'<br>';
echo self::viet_nam;
}
}
echo NGUOI::$quoctich.'<br>';//thuoc tinh tinh
echo NGUOI::viet_nam.'<br>'; //hang
echo NGUOI::vidu(); //phuong thuc tinh
?>
Chuyên đề 5: Dẫn xuất, thừa kế, lớp cơ sở, chạy đè phương thức:
Nếu lớp B thừa kế từ lớp A thì lớp B gọi là lớp dẫn xuất, lớp A là lớp cơ sở.Lớp dẫn xuất có thể sử dụng tất cả các phương thức và thuộc tính public ,protected của lớp cơ sở.Khi nào thì cần dùng thừa kế? Khi lớp B sử dụng một số phương thức và ttính mà lớp A đã định nghĩa sẵn thì ta nên cho B thừa kế của A, chỉ khai báo trong B thêm những cái mới mà trong A không có.
Ví dụ: trên đây ta có class nguoi, giờ nếu ta khai báo class công nhân. Thì mỗi công nhân cũang phải có tên tuổi, mà hai yếu tố này ta đã khai báo, “xào nấu” sẵn trong class nguoi.Vậy thì ta hãy cho class cong_nhan thừa kế class nguoi đi, khỏi khai báo thêm chi cho mệt!!!
Để cho class cong_nhan thừa kế từ class nguoi ta theo cú pháp sau: class cong_nhan extends nguoi { …}
PHP Code:
<?php
class NGUOI
{
var $hoten;
var $tuoi;
const quoctich="vietnam";
public function __construct($hoten1="Tran Thanh Bi`nh",$tuoi1=19)
{
$this->hoten=$hoten1;
$this->tuoi=$tuoi1;
}
function lay_ten()
{
return $this->hoten;
}
function lay_tuoi()
{
return $this->tuoi;
}
function chebien()
{
$this->hoten="Tên tôi là: ".$this->hoten;
$this->tuoi++;
}
function __destruct()
{
$this->hoten;
$this->tuoi;
}
}
class cong_nhan extends NGUOI
{
//không cần khai báo tên tuổi nữa
var $ten_cong_ty;
public function __construct($hoten2,$tuoi2,$cty)
{
$this->hoten=$hoten2;
$this->tuoi=$tuoi2;
$this->ten_cong_ty=$cty;
}
public function in()
{
printf("Ban ten <b>%s</b> <br>",$this->hoten);
printf("Ban <b>%s</b> tuoi<br>",$this->tuoi);
printf("Dang lam tai cong ty <b>%s</b> <br>",$this->ten_cong_ty);
printf("Quoc tich: <b>%s</b>",parent::quoctich);
}
}
$e=new cong_nhan("ngoc lan",19,"Intel Viet Nam");
echo $e->in();
?>
Khi trong lớp dẫn xuất mà có phương thức trùng tên với phương thức trong lớp cơ sở thì sẽ ưu tiên chạy pthức trong lớp dẫn xuất gọi là chạy đè phương thức.Ví dụ đơn giản như trong lớp cơ sở có hàm *** dùng để đặt tên là “chó” nhưng trong lớp dẫn xuất cũng có hàm *** và hàm này lại đặt tên là “mèo”. vậy khi chạy thì kết quả sẽ là “mèo”.
Chuyên đề 6:Truy cập phương thức trong lớp cơ sở:
PHP Code:
<?php
class cho
{
public $tencho;
public $tuoicho;
public function cho($ten,$tuoi) //đây là một cách khác của hàm khởi tạo.
{
$this->tencho=$ten;
$this->tuoicho=$tuoi;
}
public function in()
{
printf("<b>%s</b>, hien dang <b>%s</b> tuoi!",$this->tencho,$this->tuoicho);
}
}
class meo extends cho
{
public $tenmeo;
public function __construct($ten_meo,$ten_cho,$tuoi_cho)
{
$this->cho($ten_cho,$tuoi_cho);//1 cách khác để gán giá trị cho các thuộc tính lớp dẫn xuất
$this->tenmeo=$ten_meo;
}
public function printt()
{
printf("Con meo nay ten <b>".$this->tenmeo."</b> co ban cho ten la ");
cho::in(); // hoặc: parent::in();
}
}
$meo=new meo("MIMI","LULU",1);
$meo->printt();
?>
Ở chuyên đề này mình sẽ tổng kết lại. Như vậy ở các chuyên đề trên mình đã đề cập đến các vấn đề xương sống của LTHDT, còn rất nhiều vấn đề khác liên quan đến LTHDT các bạn tìm hiểu thêm, mình không có thời gian để nói hết. PHP có hỗ trợ các hàm sẵn như:__ wakeup, __sleep,__toString, __get, __set…hoặc có các lớp viết sẵn dùng để tương tác với CSDL XML,DOM…Các vấn đề này thuộc về nâng cao. Mình sẽ đề cập trong bài viết sau.
So với việc học C, thì học PHP dễ hơn rất nhiều, nó tự động các công cụ từ A đến Z cho bạn.Tuy nhiên nó dẫn đến một hội chứng là: một người học PHP chuyển sang C thì khó thích nghi trong khi người đang học C mà học thêm PHP thì sẽ hiểu rất mau ngôn ngữ PHP. Ở góc độ mình thì mình cảm thấy như thế.
Bài viết này của mình!,Email: hero_8490@yahoo.com,SV khoa kinh tế-luật, ĐHQG TPHCM.
Bài liên quan
.................
Tự dưng nhớ hồi năm 2002, mình bắt đầu làm quen với PHP 4.1.0, mỗi lần search tutorial cứ gặp trang nào trình bày rối rắm và không khoa học như bên trên là ignored ngay
----------------------------------------
tuyen dung | tim viec | viec lam
h h