Đối tượng array_search 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 Lớp (layer) và Đối tượng (object) trong PHP vì rất nhiều hàm trong WordPress trả về kết quả là dạng đối tượng nên bạn nên . 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

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

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 các đố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 (thuộc tính), và lớp nó có thể chứa các hàm mà các hàm này ta gọi nó là phương thức (phương thức)

Mình có ví dụ sau, xe là lớp, trong 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.

Đối tượng array_search php

Định nghĩa của Lớp và Đối tượng. Ả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


class meeting {

    public $name = ‘Thach’;

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

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

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


echo ‘
’;
var_dump($say);
8 trong cuộc họp lớp, biến này mình có đặt từ khóa 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ề 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 mã 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ừ khóa
object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
2

Bây giờ chúng ta đã có 2 phương thức và một thuộc tính trong lớp. Chúng ta sẽ sử dụng nó bằng cách tạo ra một biến thể để tạo hứng thú cho lớp này

[code lang=”php”]$say = cuộc họp mới;[/code]

Nghĩa là khi sử dụng lớp, chúng ta cần chọn biến nào hứng dữ liệu của lớp thì sẽ có từ khóa mới phía sau tên lớp cần sử dụng

Bây giờ bạn đổ cái biến

object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
3, bạn sẽ thấy nó có kiểu dữ liệu là đối tượng


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

Bạn đã thấy, nó trả về dữ liệu kiểu đối tượng và cho ta thấy đối tượng đó có thuộc tính tên là

object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
4. Bây giờ chúng ta có đối tượng
object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
3 rồi, chúng ta muốn sử dụng thuộc tính
object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
4 trong đó thì chỉ cần viết là
object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
7 là nó sẽ ra

Và nếu cần gọi một phương thức trong lớp thì chỉ cần viết

object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
8 hoặc
object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
9 là nó ra. Lưu ý là khi gọi phương thức và thuộc tính, cách sử dụng khác biệt của nó là thuộc tính không có ký tự

$say = new meeting;
echo $say->name . ‘
’;
echo $say->hello() . ‘
’;
echo $say->goodbye() . ‘
’;
0 phía sau như phương thức


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

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

Như ở ví dụ trên, chúng ta có thuộc tính


echo ‘
’;
var_dump($say);
8 có giá trị sẵn có là

$say = new meeting;
echo $say->name . ‘
’;
echo $say->hello() . ‘
’;
echo $say->goodbye() . ‘
’;
2. Vì vậy chúng ta cần thiết lập giá trị này khi tạo đối tượng thì làm sao?


class meeting {
    public $name;

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

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

Ngay từ dòng 5 đến dòng 8, bạn có thể thấy mình tạo ra một phương thức tên


$say = new meeting;
echo $say->name . ‘
’;
echo $say->hello() . ‘
’;
echo $say->goodbye() . ‘
’;
3 với tham số là

$say = new meeting;
echo $say->name . ‘
’;
echo $say->hello() . ‘
’;
echo $say->goodbye() . ‘
’;
4 để truyền tham số mà người dùng nhập vào

Trong phương thức này, mình sẽ chỉ định cho thuộc tính


echo ‘
’;
var_dump($say);
8 của lớp sẽ sử dụng tham số truyền vào là

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

Cuối cùng là ở phương thức

object(meeting)#117 (1) {
  ["name"]=>
  string(5) "Thach"
}
0, mình sẽ trả lại giá trị mà thằng

$say = new meeting;
echo $say->name . ‘
’;
echo $say->hello() . ‘
’;
echo $say->goodbye() . ‘
’;
3 đã truyền vào với từ khóa

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

Và khi sử dụng, chúng ta sẽ thiết lập tham số theo phương thức


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


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

Đơn giản thôi

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

Phương thức khởi tạo này có nghĩa là một phương thức mà nó sẽ được tự động thực hiện khi chúng ta tạo ra một đối tượng mới, và các tham số trong phương thức này chúng ta có thể truyền nó vào ngay lúc tạo ra các đối tượng.

Bây giờ quay lại ví dụ của bài truyền tham số, chúng ta sử dụng phương thức


$say = new meeting;
echo $say->name . ‘
’;
echo $say->hello() . ‘
’;
echo $say->goodbye() . ‘
’;
3 để truyền cái

echo ‘
’;
var_dump($say);
8 vào. Nhưng nếu bạn không muốn thực hiện bước này, muốn truyền một tham số nào đó toàn cục trong lớp thì nên sử dụng phương thức

class meeting {
    public $name;

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

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

3


    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();

Nhưng bạn hãy nhớ rằng công dụng của


class meeting {
    public $name;

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

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

4 là sẽ thực hiện cái gì mà mỗi khi ta tạo ra một đối tượng từ lớp nên bạn không hiểu là nó chỉ có chức năng truyền tham số vào lớp thôi nhé

Gợi ý. 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

Kế thừa lớp nghĩa là bạn tạo ra một lớp con mới sẽ kế thừa lại một lớp nào đó với các thuộc tính và phương thức có sẵn, từ đó bạn có thể tùy ý biến lại mã bên trong một phương thức hoặc thuộc tính nào đó.

Ví dụ, mình có lớp Xe được gọi là lớp mẹ, trong đây sẽ có sẵn các thuộc tính và phương thức của một chiếc xe như màu sắc, chạy, lùi,…Sau đó mình tạo ra một lớp khác tên BMW và nó

Trước hết chúng ta tạo lớp


class meeting {
    public $name;

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

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

5 và khai báo thuộc tính cũng như các phương thức của nó


    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 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 các 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à lớp BMW nhé


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

Khả năng hiển thị trong lớp

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


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


  • echo ‘
    ’;
    var_dump($say);
    9 – Nếu phương thức hoặc thuộc tính nào sử dụng từ khóa này, 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

  • $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ừ khóa 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ừ khóa này là nó sẽ có thể được truy cập bên trong lớp hoặc các lớp kế thừa

Ví dụ về public


echo ‘
’;
var_dump($say);
0

Ví dụ về riêng tư


echo ‘
’;
var_dump($say);
1

Ví dụ về được bảo vệ


echo ‘
’;
var_dump($say);
2

Lớp đối tượng (Class Abstraction)

Một lớp hiển thị nghĩa là nó có một hoặc nhiều phương thức là đối tượng. Phương thức hiển thị đối 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 thể hiện thì lớp đó vẫn là lớp phế vật

Để khai báo Lớp vật liệu, chúng ta chỉ việc thêm từ khóa


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


echo ‘
’;
var_dump($say);
3

Mã ở 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à vật thể hiển thị vì có từ khóa

$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 có 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 đối 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 bị bắt buộc khai báo ở lớp con. Cuối cùng là ta có phương thức công khai 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 theo 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ề mảng 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 viết 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 mà 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 lớp, kế thừa rồi sử dụng các đối tượng tạo ra từ lớp

Tạm dừng ở đây bạn đã hiểu được đối tượng dữ liệu 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 các đối tượng nhiều hơn nữa