Hợp nhất đối tượng php

Khi làm Ngôn ngữ lập trình hướng đối tượng, chúng ta thường xuyên tiếp xúc với các đối tượng lớn. Đôi khi những đối tượng này lớn đến mức nó đi kèm với một đối tượng được nhúng trong một đối tượng khác, v.v. Chúng ta sẽ tìm hiểu sâu về cách hợp nhất hai hoặc nhiều Đối tượng PHP và các cách khác nhau để thực hiện điều đó

Vài ngày trước, tôi được giao nhiệm vụ hiển thị một phần cụ thể của khối phụ tùy thuộc vào một số điều kiện.

Vì vậy, cơ sở mã kế thừa đã có một lệnh gọi API tìm nạp dữ liệu từ tài nguyên từ xa và sau đó từ phản hồi, tôi nhận được danh sách các cặp khóa-giá trị dưới dạng một mảng. Mỗi mảng riêng lẻ sau đó được lọc và thu thập trong mảng riêng tùy thuộc vào một số điều kiện

Hợp nhất đối tượng php

Chúng tôi sẽ đơn giản hóa mã đó vì nó chứa nhiều mã khác

Hợp nhất hai hoặc nhiều mã đối tượng PHP-

Đây là mã hoàn chỉnh-

<?php

namespace src\classes\planDTO;

class planDTO
{
    public $plans = [];

    public function __construct($plans)
    {
        $this->plans = $plans;
    }

    public function checkValue($planId)
    {
        foreach ($this->plans as $k => $plan) {
            if ($plan['eventId'] == $planId) {
                $this->plans = $this->plans[$k];
                return $this->plans;
            }
        }
    }
}


namespace src\fooclass;

use src\classes\planDTO\planDTO;

class event
{
    public $id = 0;
    public $name = '';
    public $addr = '';

    public function __construct($id, $name, $addr)
    {
        $this->id = $id;
        $this->name = $name;
        $this->addr = $addr;
    }
}


// class event data
$arrEvent = [0 => ["id" => 1, "name" => "a", "addr" => "LA"], 
             1 => ["id" => 2, "name" => "b", "addr" => "DC"], 
             2 => ["id" => 3, "name" => "c", "addr" => "LV"]];
// class plan data
$arrPlanDTO = [0 => ["eventId" => 1, "planId" => 1, "name" => "student only"], 
               1 => ["eventId" => 2, "planId" => 2, "name" => "employee only"], 
               2 => ["eventId" => 3, "planId" => 3, "name" => "individual only"]];

$arrObj = [];
$i = 0;
$objPlans = new planDTO($arrPlanDTO);
foreach ($arrEvent as $val)
{
    $arrObj[$i] = new Event($val['id'], $val['name'], $val['addr']);
    if ($val['id'] != "")
    {
        $arrObj[$i]->planDetails = $objPlans->checkValue($val['id']);
    }
    $i++;
}

Ở đây, chúng tôi đã định nghĩa hai lớp planDTO (lệnh gọi API) & sự kiện (nhận phản hồi planDTO dưới dạng mảng đối tượng)

Chúng tôi cũng đã xác định hai mảng $arrEvent & $arrPlanDTO. Ở đây trong dòng mã tiếp theo, chúng tôi đã lặp qua từng phần tử mảng $arrEvent vì chúng tôi phải hợp nhất đối tượng planDTO riêng lẻ bên trong lớp sự kiện. Vì vậy, đầu tiên chúng ta đã tạo đối tượng lớp sự kiện bên trong foreach() sẽ lặp qua biến $arrEvent. Chúng tôi đã chuyển id, name và addr làm tham số cho đối tượng của lớp sự kiện

Điều này sẽ lưu trữ phần tử mảng $arrEvent riêng lẻ bên trong đối tượng sự kiện như sau

Vì vậy, khi chúng ta in toàn bộ đối tượng sự kiện thì nó sẽ trông như thế này-

Array
(
    [0] => src\classes\event Object
        (
            [id] => 1
            [name] => a
            [addr] => LA
        )

    [1] => src\classes\event Object
        (
            [id] => 2
            [name] => b
            [addr] => DC
        )

    [2] => src\classes\event Object
        (
            [id] => 3
            [name] => c
            [addr] => LV
        )

)

Bây giờ, sau khi quá trình lọc hoàn tất (đã kiểm tra nếu $val[‘id’]. = “”) thì chúng ta đã thực thi phương thức checkvalue() từ lớp planDTO và chuyển $arrEvent id sự kiện riêng lẻ. Khi id sự kiện đã qua được khớp với id sự kiện kế hoạch đã được lưu trữ thì nó sẽ trả về đối tượng đó trong biến kế hoạch như sau-

[planDetails] => src\classes\planDTO\planDTO Object
(
        [plans] => Array
        (
               [eventId] => 3
               [planId] => 3
               [name] => individual only
        )

)

Khi chúng tôi thực thi mã chính sẽ tạo đầu ra cuối cùng như sau

Array
(
    [0] => src\fooclass\event Object
        (
            [id] => 1
            [name] => a
            [addr] => LA
            [planDetails] => src\classes\planDTO\planDTO Object
                (
                    [plans] => Array
                        (
                            [eventId] => 1
                            [planId] => 1
                            [name] => student only
                        )

                )

        )

    [1] => src\fooclass\event Object
        (
            [id] => 2
            [name] => b
            [addr] => DC
            [planDetails] => src\classes\planDTO\planDTO Object
                (
                    [plans] => Array
                        (
                            [eventId] => 2
                            [planId] => 2
                            [name] => employee only
                        )

                )

        )

    [2] => src\fooclass\event Object
        (
            [id] => 3
            [name] => c
            [addr] => LV
            [planDetails] => src\classes\planDTO\planDTO Object
                (
                    [plans] => Array
                        (
                            [eventId] => 3
                            [planId] => 3
                            [name] => individual only
                        )

                )

        )

)

Các cách khác để hợp nhất các đối tượng

Ngoài phương pháp hợp nhất hai hoặc nhiều đối tượng này trong PHP, chúng ta cũng có thể sử dụng phương thức array_merge() để hợp nhất hai đối tượng

Hãy xem hành động trong ví dụ-

<?php

$foo = ["fooId"=>"1"];
$bar = ["barId"=>"2"];

$obj_merged = (object) array_merge($foo, $bar);
print_r($obj_merged);

?>
// OUTPUT

stdClass Object ( [fooId] => 1 [barId] => 2 )

Như chúng ta có thể thấy, chúng ta đã tạo hai mảng và sau đó hợp nhất các mảng này bằng hàm PHPs sẵn có array_merge(). Trong khi hợp nhất, chúng tôi nhập kết quả đó vào một đối tượng. Bằng cách này, mảng cuối cùng của chúng ta sẽ được chuyển đổi thành đối tượng như hình trên

Chỉ sử dụng phương pháp này khi không có tầm quan trọng của tên lớp

Phần kết luận

Chúng ta vừa thấy hai cách để hợp nhất hai hoặc nhiều đối tượng PHP. Một với việc nhúng một đối tượng trực tiếp vào một đối tượng khác và một với việc hợp nhất hai hoặc nhiều mảng thành một mảng và sau đó nhập chúng vào một đối tượng