Hướng dẫn dùng class parent trong PHP

Hàm get_parent_class() trong PHP có nhiệm vụ lấy ra tên class Parent của một đối tượng hoặc một Class.

  • Cú pháp
  • Tham số truyền vào 
  • Giá trị trả về
  • Ví dụ minh họa
  • Ứng dụng
  • Các hàm liên quan

Cú pháp

Cú pháp hàm get_parent_class() trong PHP như sau:

get_parent_class ([ mixed $object ] ) : string

Tham số truyền vào 

  • $object là tên class cần kiểm tra.

Giá trị trả về

Hàm này trả về tên Class Parent nếu tồn tại và FALSE và không tồn tại.

Ví dụ minh họa

class dad {
    function dad()
    {
    // implements some logic
    }
}

class child extends dad {
    function child()
    {
        echo "I'm " , get_parent_class($this) , "'s son\n";
    }
}

class child2 extends dad {
    function child2()
    {
        echo "I'm " , get_parent_class('child2') , "'s son too\n";
    }
}

$foo = new child();
$bar = new child2();

?>

I'm dad's son
I'm dad's son too

Ứng dụng


            $parent = get_parent_class($className);

            if ($parent !== false) {
                $chain .= " > {$parent}";
                return $function($parent);
                // tiếp tục gọi lại $function nếu có tồn tại class parent, khi nào không còn class parent nữa thì sẽ kết thúc hàm trả về $chain.
            }
            return $chain;
        };
    }
}

class SubChild  extends ParentClass {}
class Sub2 extends SubChild {}
class Sub3 extends Sub2 {}
class Sub4 extends Sub3 {}
class Sub5 extends Sub4 {}
class Sub6 extends Sub5 {}
class Sub7 extends Sub6 {}
$getChain = Sub7::getChain();
var_dump("%s\n", $getChain('Sub7'));    
?>

Trong ví dụ trên bạn có thể thấy, bằng việc ứng dụng Closure Function mà bạn có thể lấy được toàn bộ các Class cha của một Class, giống như ĐỆ QUY, khi nào không còn Class Parent thì sẽ trả về $chain.

Các hàm liên quan

  • get_declared_interfaces() – Lấy tên tất cả các interface.
  • class_implements() – Lấy interface đã implements của class được truyền vào.
  • class_exists() – Kiểm tra xem một Class có tồn tại hay không.

Hi vọng với bài viết này, bạn đã hiểu rõ cách sử dụng hàm get_parent_class() trong PHP. Nếu thấy bài viết hay và ý nghĩa, hãy like và chia sẻ với bạn bè để mọi người cùng nhau học tập nhé. Cảm ơn bạn đã ghé thăm codetutam.com    

Như các bạn đã biết thì Hướng đối tượng có 4 tính chất đặc trưng đó là: kế thừa, đóng gói, trừu tượng, đa hình. Và bài hôm nay chúng ta sẽ cùng đi vào tìm hiểu tính kế thừa trong PHP OOP.

1, Tính kế thừa trong hướng đối tượng.

-Để cho các bạn dễ hiểu chúng ta cùng nghiên cứu qua ví dụ sau:

VD: Giả sử tôi có 2 lớp Người lớn và Trẻ con (nhỏ hơn 1 tuổi) có các properties vào methods như sau:

Hướng dẫn dùng class parent trong PHP

-Như ở trong hình thì các bạn cũng đã thấy giữa 2 lớp người lớntrẻ con có các thuộc tính và phương thức khác nhau, và điều đó ứng dụng vào trong lập trình thì chẳng nhẽ chúng ta phải viết cả 2 lớp mà trong nó lại chỉ khác nhau có một chút. Nhưng đối với lập trình hướng đối tượng chúng ta hoàn toàn có thể xây dựng ra một lớp chung cho các lớp con kế thừa nó (điều này trong phương pháp lập trình truyền thống không có) và cụ thể ở đây là lớp con người.

-Một class kế thừa từ class cha của nó sẽ có được đầy đủ các thuộc tính và phương thức của class cha (lưu ý: chỉ là có được các thuộc tính và phương thức chứ sử dụng được hay không là còn do visbility của lớp cha thế nào ).

-Trong PHP để khai báo kế thừa từ một lớp cha chúng ta sử dụng từ khóa extends theo cú pháp:

class childClass extends parentClass
{
    //code
}

Trong đó: childClass là class mà các bạn đang muốn khởi tạo, parentClass là class cha mà childClass đang muốn kế thừa nó.

VD: Giờ đây đối với giả sử ở phần 1 thì chúng ta chỉ cần tìm ra các thuộc tính và phương thức chung để xây dựng lớp cha. Mình sẽ tạo ra lớp ConNguoi là cha của 2 lớp Người lớn và Trẻ con như sau:

class ConNguoi
{
    var $chan;
    var $tay;
    var $mat;
    var $mui;

    function an()
    {

    }
}

-Và giờ 2 lớp con muốn sử kế thừa lại các thuộc tính và phương thức trên thì chỉ cần extends lại. Ở đây mình sẽ kế thừa và phát triển thêm các thuộc tính và phương thức cho 2 class con.

+Lớp Người lớn:

class NguoiLon extends ConNguoi
{
    var $longnach;

    function di()
    {

    }

    function noi()
    {

    }
}

+Lớp Trẻ con:

class TreCon extensds ConNguoi
{
    function bo()
    {

    }
}

3, Kế thừa bắc cầu.

-Và đương nhiên trong hướng đối tượng các bạn cũng có thể sử dụng tính chất bắc cầu đối với kế thừa. Khi kế thừa như thế thì class con sẽ kế thừa được tất cả các thuộc tính, phương thức từ lớp cha của nó và lớp cha của lớp cha nó...

VD:

class A
{
    //class A
}

class B extends A
{
    
}

class C extends B
{
    //class C
}

4, Gọi thuộc tính và phương thức của lớp cha.

-Đối với cách gọi thuộc tính và phương thức của class cha  thì không khác gì bài trước (xem bài trước). Nó chỉ khác khi lớp con của chúng ta cũng tồn tại một thuộc tính hay phương thức mà lớp cha của nó đã tồn tại rồi. Trong trường hợp này chúng ta sử dụng từ khóa parent::methodName() hoặc parent::propertyName để xử lý.

VD:

class ParentClass
{
    function getClass()
    {
        return 'ParentClass';
    }
}

class ChildClass extends ParentClass
{
    var $name = 'ChildClass';

    function getclass()
    {
        return 'ChildClass';
    }

    function getMethod()
    {
        echo 'Đây là phương thức ăn của lớp ' . $this->getclass();
    }

    function getMethodParent()
    {
        echo 'Đây là phương thức ăn của lớp ' . parent::getclass();
    }
}

$class = new ChildClass();
$class->getMethod();
//kết quả: Đây là phương thức ăn của lớp Trẻ con
$class->getMethodParent();
//kết quả: Đây là phương thức ăn của lớp Người lớn

5, Lời kết.

-Như vậy mình đã giới thiệu xong đến mọi người tính kế thừa trong lập trình hướng đối tượng nói chúng và Lập trình PHP nói riêng, mình hy vọng mọi người có thể hiểu được lý thuyết cũng như các ví dụ thực hành của mình. Bài tiếp theo chúng ta sẽ tìm hiểu về các quyền, giới hạn (vibisility) của thuộc tính, phương thức trong lập trình hương đối tượng.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Bài Viết Mới