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; $ivalue = $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
0
{
public $value;
}
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