Sự khác biệt giữa mảng và đối tượng trong php là gì?

PHP là một ngôn ngữ mô hình hỗn hợp, cho phép sử dụng và trả về các kiểu dữ liệu phi đối tượng, chẳng hạn như mảng. Tôi đặt ra một câu hỏi để cố gắng làm rõ một số nguyên tắc lựa chọn mảng so với đối tượng khi quyết định sử dụng cấu trúc lập trình nào trong một tình huống cụ thể

Đây thực sự là một câu hỏi về cách mã hóa dữ liệu bằng cách sử dụng cấu trúc ngôn ngữ PHP và khi nào một cách có nhiều khả năng được chọn hơn cách khác cho mục đích truyền dữ liệu [i. e. Kiến trúc hướng dịch vụ hoặc dịch vụ web]

Thí dụ

Giả sử bạn có một loại mặt hàng bao gồm {chi phí, tên, số_phần, số_mặt_hàng}. Chương trình của bạn yêu cầu hiển thị một số loại mục như vậy, đến nơi bạn quyết định sử dụng một mảng làm vùng chứa bên ngoài để chứa từng loại mục. [Bạn cũng có thể sử dụng mô hình ArrayObject của PHP cho OO, nhưng câu hỏi của tôi không phải về mảng [bên ngoài] đó]. Câu hỏi của tôi là về cách mã hóa dữ liệu loại mục và về mô hình nào sẽ sử dụng. PHP cho phép bạn sử dụng PHP Native Arrays hoặc PHP Objects

Tôi có thể mã hóa dữ liệu đó theo hai cách ở đây, như vậy

//PHP's associative arrays:
$ret = array[
    0 => array[
        'cost' => 10.00, 
        'name' => 'item1',
        'part_number' => 'zyz-100', 
        'item_count' => 15
        ],
    1 => array[
        'cost' => 34.00, 
        'name' => 'item2', 
        'part_number' => 'abc-230', 
        'item_count' => 42
        ],
  ];

so với

//here ItemType is encapsulated into an object
$ret = array[
  0 => new ItemType[10.00, 'item1', 'zyz-100', 15],
  1 => new ItemType[34.00, 'item2', 'abc-230', 42],
];

class ItemType
{
    private $price;
    private $name;
    private $partNumber;
    private $itemCount;

    function __construct[$price, $name, $partNumber, $itemCount] {..}
}

Tôi đang nghĩ gì

Mã hóa mảng có trọng lượng nhẹ và sẵn sàng cho JSON hơn, nhưng có thể dễ gây rối hơn. Viết sai chính tả một trong các khóa mảng kết hợp và bạn có thể gặp lỗi khó bắt hơn. Nhưng nó cũng dễ dàng hơn để thay đổi theo ý thích. Giả sử tôi không muốn lưu trữ item_count nữa, tôi có thể sử dụng bất kỳ phần mềm xử lý văn bản nào để dễ dàng xóa tất cả các phiên bản item_count trong mảng và sau đó cập nhật các chức năng khác sử dụng nó cho phù hợp. Nó có thể là một quá trình tẻ nhạt hơn, nhưng nó đơn giản

Mã hóa hướng đối tượng gọi các cơ sở ngôn ngữ IDE và PHP và giúp dễ dàng phát hiện bất kỳ lỗi nào trước đó, nhưng khó lập trình và viết mã hơn ngay từ đầu. Tôi nói khó hơn, bởi vì bạn phải suy nghĩ một chút về các đối tượng của mình, suy nghĩ trước và mã hóa OO cần tải nhận thức cao hơn một chút so với nhập cấu trúc mảng. Điều đó nói rằng, một khi nó được mã hóa, một số thay đổi có thể dễ thực hiện hơn, theo một nghĩa nào đó, việc loại bỏ item_count, chẳng hạn, sẽ yêu cầu thay đổi ít dòng mã hơn. Nhưng bản thân các thay đổi vẫn có thể yêu cầu tải nhận thức cao hơn so với phương pháp mảng, vì có liên quan đến các cơ sở OO cấp cao hơn

Câu hỏi

Trong một số trường hợp rõ ràng, chẳng hạn như trường hợp tôi sẽ cần thực hiện các thao tác trên dữ liệu. Nhưng trong một số trường hợp, khi tôi chỉ cần lưu trữ một vài dòng dữ liệu "Loại mặt hàng", tôi không có hướng dẫn hoặc cân nhắc rõ ràng để dựa vào khi cố gắng quyết định nên sử dụng mảng hay xây dựng đối tượng. Có vẻ như tôi chỉ có thể tung đồng xu và chọn một. Đó có phải là trường hợp ở đây?

Trong nhiều trường hợp, mảng được sử dụng trong PHP để lưu trữ thông tin giống như đối tượng, chẳng hạn như kết quả của truy vấn cơ sở dữ liệu. Tôi cũng làm điều này rất nhiều, nhưng tôi muốn thay đổi mọi thứ xung quanh để tận dụng VO. Tôi cảm thấy điều này có ý nghĩa hơn rất nhiều, vì dù sao thì hầu hết ứng dụng tôi xây dựng đều nặng về OOP và tôi nhận được tất cả các lợi ích OOP bổ sung, như gợi ý kiểu, kế thừa. tốt, bạn biết thỏa thuận

Tôi muốn xem sự khác biệt về mức tiêu thụ bộ nhớ, vì vậy tôi đã thiết lập bài kiểm tra sau


Kết quả của tôi là

Arrays: 536596
Objects: 521932

Tôi biết rằng rất có thể các đối tượng sẽ chiếm ít bộ nhớ hơn, bởi vì các mảng cần lưu trữ cả tên thuộc tính [hoặc khóa] và giá trị cho mọi bản ghi, trong khi đối tượng chỉ cần lưu trữ các giá trị, bởi vì tên thuộc tính được lưu trữ tập trung trong . Đây không phải là một công thức chính xác, nhưng nó cho bạn biết điều gì đó

Đúng, đó là ngu ngốc. Tôi viết sai mã kiểm tra và tôi đã thực hiện $data=array[]; . Kết luận thực tế ở đây là không có nhiều khác biệt. Tôi đã hy vọng các đối tượng sẽ tạo ra một sự khác biệt đáng kể, nhưng nó tối thiểu

Sự khác biệt giữa mảng và đối tượng là gì?

Trong bài viết này, chúng ta sẽ thấy sự khác biệt giữa Mảng và Mảng đối tượng trong JavaScript. . Javascript

Mảng hoặc đối tượng nào nhanh hơn trong PHP?

Sự khác biệt giữa mảng số và mảng kết hợp chỉ là 5%, vì vậy bạn có thể nói rằng chúng giống nhau. Việc sử dụng đối tượng chậm hơn +100% nhưng vẫn có thể chấp nhận được trong hầu hết các điều kiện [hay còn gọi là sử dụng gấp đôi thời gian]. Việc gọi một phương thức hoặc việc sử dụng một hàm tạo sẽ làm tăng đáng kể giá trị.

Sự khác biệt giữa đối tượng và lớp trong PHP là gì?

Lớp là khuôn mẫu cho đối tượng và đối tượng là thể hiện của lớp .

Làm cách nào để tìm sự khác biệt giữa hai mảng đối tượng trong PHP?

Hàm array_diff[] so sánh giá trị của hai [hoặc nhiều] mảng và trả về sự khác biệt. Hàm này so sánh các giá trị của hai [hoặc nhiều] mảng và trả về một mảng chứa các mục từ mảng1 không có trong mảng2 hoặc mảng3, v.v.

Chủ Đề