Hướng dẫn php class type - loại lớp php

Trước khi mình giới thiệu qua một số hàm thường dùng trong WordPress, mình muốn nói trước về khái niệm Class (lớp) và Object (đối tượng) trong PHP vì rất nhiều hàm trong WordPress trả kết quả về là dạng đối tượng nên bạn nên đọc bài này để hiểu cách hoạt động của Lớp và Đối tượng. Bây giờ bạn cần biết trước rằng đối tượng là kiểu dữ liệu được tạo ra bởi một lớp.

Nội dung chính

  • Định nghĩa Lớp và Đối tượng
  • Truyền tham số vào lớp
  • Phương thức khởi tạo ( __construct() )
  • Kế thừa lớp
  • Visibility trong lớp
  • Lớp trừu tượng (Class Abstraction)
  • Lời kết

Định nghĩa Lớp và Đối tượng

Truyền tham số vào lớp

Phương thức khởi tạo ( __construct() )

Hướng dẫn php class type - loại lớp php

Kế thừa lớp

Visibility trong lớp


class meeting {

    public $name = ‘Thach’;

    function hello()
    {
        return $this->name . ‘ saying hello’;
    }

    function goodbye()
    {
        return $this->name . ‘ saying goodbye’;
    }
}

Lớp trừu tượng (Class Abstraction)

Lời kết

Lớp nghĩa là một khung kịch bản của một đối tượng, hoặc bạn có thể hiểu đối tượng được tạo ra từ một lớp. Trong lớp nó sẽ có các biến mà biến này ta gọi là các thuộc tính (properties), và lớp nó có thể chứa các hàm mà các hàm này chúng ta gọi nó là phương thức (method).

Mình có ví dụ sau, chiếc xe là lớp, trong chiếc xe đó nó có các thuộc tính như màu đỏ, 1 cầu 2 cầu, và các hành động như chạy, lùi, thắng ta xem như một phương thức.

Định nghĩa của Class và Object. Ảnh: phpenthusiast

Bây giờ chúng ta cùng viết một lớp tên là


echo ‘
’;
var_dump($say);
7 như sau.Object.


echo ‘
’;
var_dump($say);
object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}

Trong đó, mình tạo ra một thuộc tính


echo ‘
’;
var_dump($say);
8 trong lớp meeting, biến này mình có đặt từ khoá là

echo ‘
’;
var_dump($say);
9 mà cái này tí nữa mình sẽ giải thích sau.

Kế đó mình tạo thêm một phương thức tên

object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
0 trong lớp và nó sẽ trả về là giá trị của thuộc tính

echo ‘
’;
var_dump($say);
8 kèm theo một đoạn chữ. Lưu ý rằng khi mình viết code trong một lớp mà nếu mình muốn sử dụng một thuộc tính nào đó có trong lớp thì sẽ sử dụng từ khoá
object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
2.


$say = new meeting;
echo $say->name . ‘
’;
echo $say->hello() . ‘
’;
echo $say->goodbye() . ‘
’;

Truyền tham số vào lớp

Phương thức khởi tạo ( __construct() )


class meeting {
    public $name;

    public function set_name( $ten )
    {
        $this->name = $ten;
    }

    public function hello()
    {
        return $this->name . ‘ saying hello’;
    }
}

Kế thừa lớp

Visibility trong lớp

Lớp trừu tượng (Class Abstraction)

Lời kết


$say = new meeting;
$say->set_name(‘Super Man’);
echo $say->hello();

Lớp nghĩa là một khung kịch bản của một đối tượng, hoặc bạn có thể hiểu đối tượng được tạo ra từ một lớp. Trong lớp nó sẽ có các biến mà biến này ta gọi là các thuộc tính (properties), và lớp nó có thể chứa các hàm mà các hàm này chúng ta gọi nó là phương thức (method).

Phương thức khởi tạo ( __construct() )

Kế thừa lớp

Visibility trong lớp


    class meeting {
        public $name;
        public $skill;
        function __construct($ten, $kynang)
        {
            $this->name = $ten;
            $this->skill = $kynang;
        }

function hello()
        {
            return "Hello, my name is $this->name, my skill is $this->skill";
        }
    }

         $say = new meeting(‘Thach’, ‘WordPress’);
    echo $say->hello();

Lớp trừu tượng (Class Abstraction)

Lời kết: Lớp WP_Query trong WordPress có cách sử dụng tương tự, xem hướng dẫn.

Kế thừa lớp

Visibility trong lớp

Lớp trừu tượng (Class Abstraction)

Lời kết


    class Car {
        public $name;
        public $color;
        public $type;

        public function car_info()
        {
            // Chỉ là tránh lỗi ‘Undefined variable’
            (!isset($output)) ? $output = null : ”;

            $output .= ‘

    ’;
                $output .= "
  • Name: $this->name
  • ";
                $output .= "
  • Color: $this->color
  • ";
                $output .= "
  • Type: $this->type
  • ";
                $output .= "
";
            return $output;
        }
    }

Sau đó chúng ta tạo ra lớp


class meeting {
    public $name;

    public function set_name( $ten )
    {
        $this->name = $ten;
    }

    public function hello()
    {
        return $this->name . ‘ saying hello’;
    }
}

6 và nó sẽ kế thừa lại lớp

class meeting {
    public $name;

    public function set_name( $ten )
    {
        $this->name = $ten;
    }

    public function hello()
    {
        return $this->name . ‘ saying hello’;
    }
}

5.


class BMW extends Car {
    public $name = ‘BMW’;
    public $color = ‘Red’;
    public $type = ‘Sport’;
}

Lúc này lớp


class meeting {
    public $name;

    public function set_name( $ten )
    {
        $this->name = $ten;
    }

    public function hello()
    {
        return $this->name . ‘ saying hello’;
    }
}

6 sẽ sử dụng được các thuộc tính và phương thức của lớp

class meeting {
    public $name;

    public function set_name( $ten )
    {
        $this->name = $ten;
    }

    public function hello()
    {
        return $this->name . ‘ saying hello’;
    }
}

5. Nếu cần tinh chỉnh lại thuộc tính hay phương thức nào thì cứ việc khai báo lại bên trong nó, như ví dụ trên là mình khai báo giá trị của các thuộc tính trong lớp

class meeting {
    public $name;

    public function set_name( $ten )
    {
        $this->name = $ten;
    }

    public function hello()
    {
        return $this->name . ‘ saying hello’;
    }
}

6.

Bây giờ chúng ta thử sử dụng phương thức


$say = new meeting;
$say->set_name(‘Super Man’);
echo $say->hello();
1 của lớp Car và vào lớp BMW nhé.


$bmw = new BMW;
echo $bmw->car_info();

Visibility trong lớp

Ở các ví dụ trên, bạn có thể thấy mình sử dụng từ khoá


echo ‘
’;
var_dump($say);
9 khi khai báo thuộc tính và phương thức. Và từ khoá này được gọi là từ khoá visibility. Hiện tại trong lớp, bạn sẽ sử dụng 3 từ khoá phổ biến nhất hiện tại như:


  • echo ‘
    ’;
    var_dump($say);
    9 – Nếu phương thức hoặc thuộc tính nào sử dụng từ khoá này thì nghĩa là chúng ta có thể sử dụng nó ở bất cứ đâu, tức là có thể gọi ra bên trong một lớp hoặc bên ngoài một lớp, hoặc sử dụng trong một lớp con (lớp được kế thừa).

  • $say = new meeting;
    $say->set_name(‘Super Man’);
    echo $say->hello();
    4 – Phương thức/Thuộc tính nào sử dụng từ khoá này thì nó chỉ được truy cập bên trong một lớp của chính nó, không thể sử dụng cho lớp khác hoặc không thể gọi ra bên ngoài. Ví dụ bạn có thể sử dụng $this->name bên trong lớp như không thể gọi ra với $object->name ở bên ngoài lớp.

  • $say = new meeting;
    $say->set_name(‘Super Man’);
    echo $say->hello();
    5 – Phương thức/Thuộc tính nào sử dụng từ khoá này là nó sẽ có thể được truy cập bên trong class hoặc các class kế thừa.

Ví dụ về public


echo ‘
’;
var_dump($say);
0

Ví dụ về private


echo ‘
’;
var_dump($say);
1

Ví dụ về protected


echo ‘
’;
var_dump($say);
2

Lớp trừu tượng (Class Abstraction)

Một lớp trừu tượng nghĩa là nó có một hoặc nhiều phương thức là trừu tượng. Phương thức trừu tượng thì nghĩa là nó phải bắt buộc được khai báo ở các lớp con. Bạn nên lưu ý rằng dù lớp của bạn có bao nhiêu phương thức trừu tượng thì lớp đó vẫn là lớp trừu tượng.

Để khai báo lớp trừu tượng thì chúng ta chỉ việc thêm từ khoá


$say = new meeting;
$say->set_name(‘Super Man’);
echo $say->hello();
6 đằng trước tên class và tên phương thức mà ta muốn làm trừu tượng. Lưu ý là phương thức khai báo trừu tượng sẽ không chứa bất cứ cái gì, ngoại trừ tham số.


echo ‘
’;
var_dump($say);
3

Code ở trên là chúng ta tạo ra một lớp tên


$say = new meeting;
$say->set_name(‘Super Man’);
echo $say->hello();
7 và nó là trừu tượng vì có từ khoá

$say = new meeting;
$say->set_name(‘Super Man’);
echo $say->hello();
6 ở trước. Bên trong nó ta có thuộc tính

$say = new meeting;
$say->set_name(‘Super Man’);
echo $say->hello();
9 là dạng

$say = new meeting;
$say->set_name(‘Super Man’);
echo $say->hello();
5 để ta có thể sử dụng nó ở các lớp con nhưng không cho phép truy cập từ bên ngoài.

Sau đó chúng ta có phương thức trừu tượng tên


    class meeting {
        public $name;
        public $skill;
        function __construct($ten, $kynang)
        {
            $this->name = $ten;
            $this->skill = $kynang;
        }

function hello()
        {
            return "Hello, my name is $this->name, my skill is $this->skill";
        }
    }

         $say = new meeting(‘Thach’, ‘WordPress’);
    echo $say->hello();

1, tức là phương thức này sẽ phải được bắt buộc khai báo ở lớp con. Cuối cùng là ta có phương thức public là

    class meeting {
        public $name;
        public $skill;
        function __construct($ten, $kynang)
        {
            $this->name = $ten;
            $this->skill = $kynang;
        }

function hello()
        {
            return "Hello, my name is $this->name, my skill is $this->skill";
        }
    }

         $say = new meeting(‘Thach’, ‘WordPress’);
    echo $say->hello();

2 để có thể sử dụng nó bên ngoài cho mục đích lấy dữ liệu hiển thị, và chức năng của phương thức này là hiển thị kết quả trả về của phương thức

    class meeting {
        public $name;
        public $skill;
        function __construct($ten, $kynang)
        {
            $this->name = $ten;
            $this->skill = $kynang;
        }

function hello()
        {
            return "Hello, my name is $this->name, my skill is $this->skill";
        }
    }

         $say = new meeting(‘Thach’, ‘WordPress’);
    echo $say->hello();

1 sau khi nó xử lý.

Bây giờ chúng ta tạo ra một lớp con kế thừa lại lớp mẹ và thử không khai báo phương thức


    class meeting {
        public $name;
        public $skill;
        function __construct($ten, $kynang)
        {
            $this->name = $ten;
            $this->skill = $kynang;
        }

function hello()
        {
            return "Hello, my name is $this->name, my skill is $this->skill";
        }
    }

         $say = new meeting(‘Thach’, ‘WordPress’);
    echo $say->hello();

1 cho nó xem cái gì xảy ra nhé.


echo ‘
’;
var_dump($say);
4

Lúc này bạn sẽ nhận được lỗi này:


echo ‘
’;
var_dump($say);
5

Như vậy, bạn phải khai báo phương thức


    class meeting {
        public $name;
        public $skill;
        function __construct($ten, $kynang)
        {
            $this->name = $ten;
            $this->skill = $kynang;
        }

function hello()
        {
            return "Hello, my name is $this->name, my skill is $this->skill";
        }
    }

         $say = new meeting(‘Thach’, ‘WordPress’);
    echo $say->hello();

1 thì mới được. Ta sửa lại như sau:


echo ‘
’;
var_dump($say);
6

Kết quả nó sẽ trả về array của thằng


    class meeting {
        public $name;
        public $skill;
        function __construct($ten, $kynang)
        {
            $this->name = $ten;
            $this->skill = $kynang;
        }

function hello()
        {
            return "Hello, my name is $this->name, my skill is $this->skill";
        }
    }

         $say = new meeting(‘Thach’, ‘WordPress’);
    echo $say->hello();

1.

Lời kết

Trong bài này mục đích của mình là muốn cho bạn hiểu thật kỹ về khái niệm Class và Object trong PHP, và khi code chúng ta hoàn toàn sử dụng Class và Object người ta gọi đó là Lập trình hướng đối tượng. Như vậy lập trình hướng đối tượng không phải là khó, chỉ là bạn chưa biết cách nên nghe tên nó có vẻ cao sang nhưng thực ra nó cũng chỉ là việc sử dụng class, kế thừa rồi sử dụng các đối tượng tạo ra từ class mà thôi.

Tạm thời ở đây bạn đã hiểu được dữ liệu đối tượng rồi. Ở bài sau, mình sẽ nói qua cho bạn về một số hàm tiêu biểu trong WordPress để bạn sử dụng, lúc đó bạn sẽ làm việc với đối tượng nhiều hơn nữa.

Thạch Phạm

Bé Thạch 18 tuổi, hiện công tác tại AZDIGI với vị trí giữ xe và viết thuê tại ThachPham.Com. Sở thích nghiên cứu về website, DevOps, SysAdmin và xăm mình nữa. Phương châm sống của bé là "No Pain, No Gain".

Hiện tại blog tạm đóng bình luận vì mình cần tập trung thời gian vào cập nhật bài viết. Bình luận sẽ mở ra cho đến khi mình sẵn sàng.