P H P  V I E T  N A M  P O R T A L
Xin chào, Khách. Vui lòng đăng nhập hoặc đăng ký tài khoản.
Bạn đã quên email kích hoạt?






     Trang chủ | Download | Tự học PHP | Kho tư liệu | Diễn đàn
Trang: [1]
  In  
Tác giảChủ đề: Overloading method trong class  (Đã đọc 1868 lần)
thanhsangvnm
PHP Starter
*
Posts: 2


Xem hồ sơ
« on: August 11, 2010, 05:33:04 AM »

Từ "Overloading" ở đây không mang nghĩa là những hàm như __autoload, ...

Mà ý mình muốn đề cập đến viết nhiều method cùng tên nhưng có thông số khác nhau trong một class. Có bạn nào biết không chỉ mình với. Thanks
Logged
thanhsangvnm
PHP Starter
*
Posts: 2


Xem hồ sơ
« Trả lời #1 on: August 11, 2010, 05:46:27 AM »

Mình đưa ra một ví dụ cho dễ hiểu.

Là mình muốn tạo ra một class có dạng như sau:

/** just a demo to understand what overloading is */
class demo {
    public function demoFunction() {
        echo 'demo Function';
    }

    public function demoFunction($message) {
       echo "demo Function with message $message";
    }
}

Cao thủ nào rành, giúp mình với, please!!!!
Logged
Neexare
PHP Starter
*
Posts: 24


Xem hồ sơ
« Trả lời #2 on: August 11, 2010, 11:15:01 AM »

Bạn có thể overload methods trong PHP bằng inheritance. Ví dụ như sau:

class clParent{
  public function init() {
   echo 'init in clParent';
  }
}

class clChild extends clParent{
  public function init($sMessage) {
    echo 'init in clChild with message ' . $sMessage;
  }
}
Logged
™[SorivevoL]™
Global Moderator
PHP Intermediate
*****
Posts: 400



Xem hồ sơ Email
« Trả lời #3 on: August 11, 2010, 09:35:23 PM »

bạn Neexare đã hiểu sai giửa overriding & overloading

override là giống như bạn nói : viết 1 method trùng tên với method của lớp cha, để thay thế method của lớp cha.

còn về phần overload :
php định nghĩa khác với các ngôn ngữ khác . cho nên ví dụ của bạn thanhsangvnm đưa ra là sai. vì php không cho đặt trùng tên hàm trong cùng 1 lớp.
ví dụ của bạn chỉ đúng trong ngôn ngữ cho phép overloading .. ví dụ java , c#. khi đó overloading sẽ được hiểu là cùng 1 tên hàm, nhưng các params đưa vào khác nhau , khi đó nó sẽ sử dụng hàm theo params đó.
còn trong php. overloading nghĩa là http://php.net/manual/en/language.oop5.overloading.php
.. dịch đại khái : là để tạo ra properties hoặc methods thông qua magic methods.
Logged
tpphu
PHP Intermediate
*
Posts: 180

Trần Phong Phú

tpphu@yahoo.com tpphu
Xem hồ sơ WWW Email
« Trả lời #4 on: August 12, 2010, 04:27:24 AM »

bạn Neexare đã hiểu sai giửa overriding & overloading

override là giống như bạn nói : viết 1 method trùng tên với method của lớp cha, để thay thế method của lớp cha.

còn về phần overload :
php định nghĩa khác với các ngôn ngữ khác . cho nên ví dụ của bạn thanhsangvnm đưa ra là sai. vì php không cho đặt trùng tên hàm trong cùng 1 lớp.
ví dụ của bạn chỉ đúng trong ngôn ngữ cho phép overloading .. ví dụ java , c#. khi đó overloading sẽ được hiểu là cùng 1 tên hàm, nhưng các params đưa vào khác nhau , khi đó nó sẽ sử dụng hàm theo params đó.
còn trong php. overloading nghĩa là http://php.net/manual/en/language.oop5.overloading.php
.. dịch đại khái : là để tạo ra properties hoặc methods thông qua magic methods.
Hoàn toàn đồng ý với ý kiến của bạn.
Cũng cần nói thêm tí nữa rằng việc không cho đặt tên hàm trùng theo kinh nghiệm của tôi biết thì không phân biệt nó la public hay gì khác, kể cả có static hay không v.v... và không phân biệt hoa thường luôn.

Nhưng nếu bạn muốn viết vậy thì dùng magic function để làm cũng okay, tất nhiên nếu bạn code bằng IDE như Netbean thì có thể hơi rắc rối một tí vì bạn dùng auto-complete sẽ không được. Nhưng đâu cần đúng hem? Smiley
Chúc vui.
« Last Edit: August 12, 2010, 04:29:03 AM bởi tpphu » Logged

A member of NonIT Blog Bog - Be master without effort.
Neexare
PHP Starter
*
Posts: 24


Xem hồ sơ
« Trả lời #5 on: August 17, 2010, 01:48:59 AM »

Ah, mình xin lỗi. Mình đã sử dụng sai từ. Nhưng theo mình tháy thì nên dùng overriding để giải quyết vấn đề cũa bạn thanhsangvnm. Vì đúng như những bạn đã nói thì PHP thật ra không ủng hộ overloading cho methods ngoài cách dùng magic methods. Nhưng magic methods thì không có tối ưu, và là một giải pháp xấu xí.
Logged
Trang: [1]
  In  
 
Chuyển sang:  

Powered by SMF 1.1.15 | SMF © 2006-2007, Simple Machines . Modified by PHPVN Members