/ / Php nâng cao / Comment (0)

Phương thức MAGIC và tính chất kế thừa trong PHP

Ở bài trước chúng ta đã có cái nhìn tổng quan cũng như những định nghĩa quan trọng trong lập trình hướng đối tượng (OOP),sang phần này chúng ta sẽ tìm hiểu 1 phần quan trọng nhất trong lập trình hướng đối tượng của PHP đó chính là các phương thức MAGIC và tính chất kế thừa (extends).

Tim hiểu các phương thức MAGIC

– Là những yếu tố giúp cho hướng đối tượng trở nên linh hoạt hơn rất nhiều.Chúng thường được gọi khi có những hành động (action) nhất định thường xuyên xảy ra trong các đối tượng (object).Trong php thì có 3 phương thức MAGIC hay được sử dụng đó là:

  1. __construct(): phương thức này sẽ tự động được gọi ngay khi một object mới được khởi tạo.
  2. __destruct(): Để gọi một hàm khi object bị hủy
  3. __toString(): Sử dụng khi echo đối tượng

– Ví dụ:

<?php class Color{
          public $color  = “red”; //thuộc tính
          function __construct() {
                echo “Class ”.__CLASS__. “ construct”;
          }
          function __destruct() {
                echo “Class ”.__CLASS__. “ destruct”;
          }
          function __toString() {
                return “Class ”.__CLASS__. “toString”;
          }
      }
      $test = new Color; //khởi tạo đối tượng Color
      echo $test ; //
?>

Và kết quả sẽ là:

Class Color construct
Class ColortoString
Class Color destruct

Như trong ví dụ trên thì các bạn thấy khi chúng ta vừa khời tạo 1 đối tượng mới thì phương thức __construct() được chạy đầu tiên,sau đó khi bạn echo ra đối tượng $test lúc này nó sẽ chạy tới phương thức __toString() và sau khi sử dụng xong nó sẽ chạy phương thức __destruct() và phương thức này chạy cuối cùng

Kế thừa (Extends)

– Một class con sẽ được kế thừa tất cả các thuộc tính và phương thức bên trong class cha(trừ các thuộc tính hoặc phương thức được khai báo với từ khóa private).
– Cú pháp:

<?php
class ClassCon extends ClassCha{
     //phương thức và thuộc tính
}

+ Để kế thừa trong php chúng ta sử dụng từ khóa extends

– Chúng ta sẽ đi vào ví dụ để có thể hiểu rõ hơn về tính chất kế thừa này:

+ Chúng ta xây dựng 1 class có tên là ColorCha với nội dung sau:

<?php
class ColorCha{
          public $color     = “red”; //thuộc tính
          function __construct() {
                echo “Class ”.__CLASS__. “ construct”;
          }
          function __destruct() {
                echo “Class ”.__CLASS__. “ destruct”;
          }
          function getColor() {
                return $this->color;
          }
}
?>

+ Tiếp theo chúng ta xây dựng 1 class có tên là ColorCon kế thừa từ class ColorCha với nội dung sau:

<?php
class ColorCon extends ColorCha{
     function newFunction() {
          echo “Class ”.__CLASS__. “ new”;
     }
}
?>

Bầy giờ chúng ta sẽ gửi chạy 1 vài lệnh test dưới đây để xem kết quả nhé:

$obj = new ColorCon;
echo $obj->newFunction();
echo $obj->getColor();

Và kết quả sẽ là:

Class ColorCha construct
Class ColorCon new
red
Class ColorCha destruct

Qua ví dụ trên thì các thấy,ban đầu chúng ta khời tạo đối tượng ColorCon mà tại sao lại có thể hiển thị ra được các thông tin bên trong hàm __construct()__destruct() trong class ColorCha đó chính là tính chất kế thừa,lúc này class ColorCon đã kế thừa class ColorCha và nó sẽ sử dụng được tất cả các phương thức,thuộc tính (ngoại trừ được định nghĩa là private) từ class ColorCha

Parent và Final

+ Tại một class con, để thay đổi giá trị, tính năng của một thuộc tính hoặc phương thức đã có sẵn ở class cha, bạn chỉ cần ghi đè (nạp chồng) lên nó bằng cách khởi tạo lại chính nó trong class con

+ Để thêm một chức năng mới trong một phương thức kế thừa mà vẫn giữ được nguyên gốc chức năng ban đầu của nó, bạn sử dụng từ khóa parent::tênphươngthức

– Ví dụ:
+ Với 2 class ở ví dụ trên,ta sẽ ghi đè hàm __construct() của class ColorCha trong class ColorCon

<?php
class ColorCon extends ColorCha{
     function __construct() {
                echo “Class ”.__CLASS__. “ construct”;
     }
     function newFunction() {
          echo “Class ”.__CLASS__. “ new”;
     }
}
?>

+ Với 2 class ở ví dụ trên,ta sẽ kế thừa hàm __construct() của class ColorCha trong class ColorCon

<?php
class ColorCon extends ColorCha{
     function __construct() {
                echo “Class ”.__CLASS__. “ construct”;
                parent:: __construct();
     }
     function newFunction() {
          echo “Class ”.__CLASS__. “ new”;
     }
}
?>

+ Final là qui ước phương thức cuối cùng hoặc 1 class cuối cùng. Final dùng để chống việc ghi đè hoàn toàn và chống sự kế thừa



04/09/2014
Written by nobitacnt

Trong bài viết không tránh khỏi những câu từ chưa chính xác,mong nhận được sự góp ý để website hoàn thiện hơn.Nếu thấy bài viết có ích với bạn hãy like và share để ủng hộ nhé :D.

Bài viết chùng chuyên mục

Gửi bình luận

Giới thiệu

Mình tạo ra blog này với mong muốn chia sẻ và học hỏi kinh nghiệm trong quá trình thiết kế website. Website đang trong quá trình phát triển chân thành cảm ơn mọi sự góp ý của các bạn để làm cho website ngày càng hoàn thiên.

DMCA.com Protection Status
Theo dõi qua Email

Tổng hợp các bài viết về

Hoc php - CodeIgniter Framework - Laravel Framework - PHP va MYSQL