Mảng kết hợp so với đối tượng PHP

In PHP 5+, objects are passed by reference. This has got me into trouble in the past when I've tried to make arrays of objects.
For example, I once wrote something like the following code, thinking that I'd get an array of distinct objects. However, this is wrong. This code will create an array of multiple references to the same object.

  class myNumber
  {
    public $value;
  }

________số 8_______

  var_dump($arrayOfMyNumbers);
?>

output:
array(3) {
  [0]=>
  object(myNumber)#1 (1) {
    ["value"]=>
    int(4)
  }
  [1]=>
  object(myNumber)#1 (1) {
    ["value"]=>
    int(4)
  }
  [2]=>
  object(myNumber)#1 (1) {
    ["value"]=>
    int(4)
  }
}

notice that the value at each index in the array is the same. That is because the array is just 3 references to the same object, but we change the property of this object every time the for loop runs. This isn't very useful. Instead, I've changed the code below so that it will create an array with three distinct references to three distinct objects. (if you're having a hard time understanding references, think of this as an array of objects, and that this is just the syntax you have to use.)

  class myNumber
  {
    public $value;
  }

  $arrayOfMyNumbers = array();
  for( $i = 0; $i<3; $i++ ) {
    $arrayItem = new myNumber();
    $arrayItem->value = $i;
    $arrayOfMyNumbers[] = $arrayItem;
  }

  var_dump($arrayOfMyNumbers);
?>

output:
array(3) {
  [0]=>
  object(myNumber)#1 (1) {
    ["value"]=>
    int(0)
  }
  [1]=>
  object(myNumber)#2 (1) {
    ["value"]=>
    int(1)
  }
  [2]=>
  object(myNumber)#3 (1) {
    ["value"]=>
    int(2)
  }
}

  class myNumber
  {
    public $value;
  }
0

một nhà xây dựng là gì?

Kết quả (càng nhỏ càng tốt)

Đó là kết quả của điểm chuẩn tính bằng giây

Kết quả theo tỷ lệ phần trăm so với kết quả nhỏ hơn

Phần kết luận

  • 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 một đối tượng chậm hơn +100% nhưng nó vẫn được chấp nhận trong hầu hết các điều kiện (hay còn gọi là nó 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ị. Ngoài ra, tốt hơn là sử dụng một đối tượng/hàm tạo hơn là một mảng/nhà máy. Tại sao?
  • Việc sử dụng setter/getters ảnh hưởng đáng kể đến hiệu suất. Nếu bạn có thể thì bạn nên tránh điều đó
  • Việc sử dụng setters và getters ma thuật thật kinh khủng (chậm hơn gần 10 lần). Đó có phải là lý do tại sao Laravel chậm không?
  • Ngoài ra, setters và getters là vanilla, chúng không xác thực nếu trường tồn tại bất kỳ xác thực nào khác
  • Và việc sử dụng stdClass (lớp ẩn danh) cũng tệ nhưng không tệ bằng việc sử dụng setter và getters

ps. Thử nghiệm đã chạy 1 triệu lần và chênh lệch nhỏ hơn 0. 3 giây, vậy nó có quan trọng không?

Giả sử chúng tôi có 100 người dùng đồng thời (không phải là một con số nhỏ nhưng không phải là không thể) và chúng tôi đang xử lý và trả về một danh sách có 1000 giá trị. Đó là 100x1000 = 100'000 đối tượng. Vì vậy, nếu chúng ta xem xét 100.000 đối tượng, thì sự khác biệt nhỏ hơn 0. 03 giây trong trường hợp xấu nhất. Tuy nhiên, hệ thống của chúng tôi xử lý nhiều hơn một thao tác đơn lẻ, vì vậy nếu chúng tôi đang hiển thị danh sách các đối tượng, thì chúng tôi cũng đang xác thực, hiển thị các giá trị khác, xác thực, đọc từ cơ sở dữ liệu và lưu trữ vào bộ nhớ và trả lại cho khách hàng qua web hoặc . Nó không phải là vấn đề lớn đối với một dự án nhỏ, nhưng nó quan trọng đối với một dự án lớn

JavaScript không có mảng kết hợp, chỉ có các đối tượng. Có hai dạng đối tượng, nghĩa đen và hàm tạo. Để truy cập và gán các thuộc tính, có hai dạng ký hiệu, ký hiệu dấu chấm và ký hiệu dấu ngoặc

var obj;
obj = {};

Ở trên là một đối tượng theo nghĩa đen. Chúng ta có thể mở rộng nó hơn nữa,

obj = {
    name: "JavaScript",
    version: "1.6"
}

Chúng ta có thể truy cập các thuộc tính như vậy,

console.log(obj.name, obj.version);
// JavaScript 1.6

Một hàm tạo đối tượng có thể trông như thế này

function Language(name, version){
    this.name = name;
    this.version = version;
}

Chúng tôi sẽ mở rộng nguyên mẫu của Ngôn ngữ để bao gồm một phương thức cho phép chúng tôi kiểm tra tất cả các thuộc tính trong đối tượng thể hiện

Language.prototype.query = function(){
    for (var i in this){
        console.log(i +": "+ this[i]); // bracket notation
    }
};

Bây giờ chúng ta có thể gọi hàm tạo để quay một đối tượng mới sẽ kế thừa nguyên mẫu của hàm tạo

var js = new Language("JavaScript","1.6");
js.query();
//
name: JavaScript
version: 1.6
query: function (){
    for (var i in this){
        console.log(i +": "+ this[i]);
    }
}

Chơi với cái này trong phòng thí nghiệm.

Tôi biết điều này không trả lời câu hỏi của bạn. Không có câu trả lời thực sự vì như tôi đã đề cập ở trên, không có mảng kết hợp nào trong JS. Tiếp tục đặt câu hỏi như thế này và bạn sẽ hiểu

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

Một đối tượng là một thể hiện của một lớp. Nó chỉ đơn giản là một mẫu vật của một lớp và được cấp phát bộ nhớ. Mảng là cấu trúc dữ liệu lưu trữ một hoặc nhiều loại giá trị tương tự nhau trong một tên nhưng mảng kết hợp khác với một mảng PHP đơn giản . Một mảng chứa chỉ số chuỗi được gọi là mảng kết hợp.

Là một đối tượng một mảng kết hợp?

Khi xử lý các đối tượng JavaScript dưới dạng mảng, Chuỗi được sử dụng làm chỉ mục để liên kết từng giá trị thuộc tính với tên đối tượng. Mảng loại này được gọi là "mảng kết hợp" .

Ưu điểm của mảng kết hợp trong PHP là gì?

Ưu điểm của mảng kết hợp . We can save more data, as we can have a string as key to the array element, where we can have associated data to the value to be stored, like in our example, we stored the type of the car as key along with the name of the car as value.

Làm cách nào để chuyển đổi một đối tượng thành một mảng kết hợp trong PHP?

Loại Truyền đối tượng vào một mảng . Bằng cách sử dụng các quy tắc đánh máy được hỗ trợ trong PHP, nó sẽ chuyển đổi một đối tượng PHP thành một mảng