Sao chép mảng php mà không cần tham chiếu
Các đối tượng trong PHP được gán theo tham chiếu, vì vậy việc sao chép một đối tượng bằng toán tử = sẽ dẫn đến một biến thứ hai tham chiếu đến cùng một đối tượng chứ không phải là một bản sao thực sự. Nhập chức năng sao chép của PHP để tạo một bản sao nông của đối tượng Show
Sử dụng = để sao chép một đối tượng chỉ sao chép tham chiếuĐể minh họa cách PHP chỉ tạo tham chiếu đến đối tượng ban đầu bằng toán tử =, hãy xem ví dụ sau. (Lưu ý rằng tôi đã gán = màu đỏ trong ví dụ) class foo {
public $bar;
}
$foo = new foo();
$foo->bar = 'baz';
$foo2 = $foo;
$foo2->bar = 'bat';
echo $foo->bar;
echo $foo2->bar;
Cả hai dòng echo ở cuối ví dụ sẽ lặp lại "bat" chứ không phải "baz" và "bat", bởi vì $foo2 là tham chiếu đến $foo và việc truy cập các thuộc tính cũng như gọi phương thức cho $foo2 thực sự là tham chiếu đến các thuộc tính và phương thức đó Sử dụng bản sao để sao chép và đối tượng sao chép đối tượngSử dụng cùng một ví dụ, nhưng sử dụng bản sao thay vì sao chép đối tượng sẽ dẫn đến một bản sao của đối tượng ban đầu. Việc thay đổi thuộc tính và phương thức gọi sẽ làm như vậy đối với đối tượng được sao chép chứ không phải đối tượng gốc Sự khác biệt duy nhất giữa ví dụ trên và ví dụ này là "=" trở thành "bản sao" được đánh dấu màu đỏ trong cả hai ví dụ class foo {
public $bar;
}
$foo = new foo();
$foo->bar = 'baz';
$foo2 = clone $foo;
$foo2->bar = 'bat';
echo $foo->bar . "n";
echo $foo2->bar . "n";
Ví dụ thứ hai xuất ra "baz" và sau đó là "bat" Bản sao nôngNhân bản một đối tượng tạo ra một bản sao "nông" của đối tượng ban đầu. Điều này có nghĩa là bất kỳ thuộc tính nào là tham chiếu đến các biến khác sẽ vẫn là tham chiếu đến các biến đó và không sao chép chính chúng Có thể bạn quan tâmPhương thức __cloneNếu đối tượng chứa phương thức __clone thì nó sẽ được gọi khi đối tượng được sao chép. Nó phải là một chức năng có thể truy cập công khai và không thể được gọi trực tiếp nếu không PHP sẽ kết thúc với một lỗi nghiêm trọng. Bạn sẽ không thực sự lặp lại đầu ra khi sao chép, nhưng nếu đối tượng được sao chép trong ví dụ bên dưới, nó sẽ lặp lại "tôi đã được sao chép" sao chép và sao chép về cơ bản làm điều tương tự và sẽ tạo một bản sao của các tham chiếu đến một đối tượng. Sự khác biệt đến ở chỗ bạn có thể ngắt tham chiếu trong một bản sao NẾU bạn xử lý nó trong đối tượng mà bạn sao chép - nó không xảy ra một cách tự động giống như trong các ngôn ngữ khác như C# và python Nhanh chóng và hèn hạ
Nhưng nếu bạn xử lý hành động nhân bản, kết quả sẽ thay đổi
Câu trả lời ngắn gọn là nó phụ thuộc vào những gì bạn đang sao chép. Nếu giá trị là một đối tượng thì việc gán giá trị cho một biến khác sẽ chỉ sao chép một tham chiếu. Trong tất cả các trường hợp khác (số, chuỗi, mảng), nó sẽ tạo một bản sao ví dụ
đầu ra
đầu ra
Vì vậy, trong cả hai trường hợp này, biến $b là thứ riêng của nó và bạn có thể thay đổi nó mà không ảnh hưởng đến $a Nhưng với một đối tượng ________số 8đầu ra
Cả hai biến hiện có cùng giá trị, vì $b chỉ là một tham chiếu đến $a. Ngoài ra, việc thay đổi $a sẽ ảnh hưởng đến $b Sự khác biệt chính giữa bản sao và chế độ xem của một mảng là bản sao là một mảng mới và chế độ xem chỉ là chế độ xem của mảng ban đầu Bản sao sở hữu dữ liệu và mọi thay đổi đối với bản sao sẽ không ảnh hưởng đến mảng ban đầu và mọi thay đổi đối với mảng ban đầu sẽ không ảnh hưởng đến bản sao Chế độ xem không sở hữu dữ liệu và mọi thay đổi được thực hiện đối với chế độ xem sẽ ảnh hưởng đến mảng ban đầu và mọi thay đổi được thực hiện đối với mảng ban đầu sẽ ảnh hưởng đến chế độ xem SAO CHÉPThí dụTạo một bản sao, thay đổi mảng ban đầu và hiển thị cả hai mảng nhập numpy dưới dạng np arr = np. mảng([1, 2, 3, 4, 5]) in(mảng) Bản sao KHÔNG NÊN bị ảnh hưởng bởi những thay đổi được thực hiện đối với mảng ban đầu LƯỢT XEMThí dụTạo dạng xem, thay đổi mảng ban đầu và hiển thị cả hai mảng nhập numpy dưới dạng np arr = np. mảng([1, 2, 3, 4, 5]) in(mảng) Chế độ xem NÊN bị ảnh hưởng bởi những thay đổi được thực hiện đối với mảng ban đầu Thực hiện thay đổi trong VIEWThí dụTạo chế độ xem, thay đổi chế độ xem và hiển thị cả hai mảng nhập numpy dưới dạng np arr = np. mảng([1, 2, 3, 4, 5]) in(mảng) Mảng ban đầu NÊN bị ảnh hưởng bởi những thay đổi được thực hiện đối với dạng xem Kiểm tra xem Array có sở hữu dữ liệu của nó khôngNhư đã đề cập ở trên, bản sao sở hữu dữ liệu và chế độ xem không sở hữu dữ liệu, nhưng làm cách nào để kiểm tra điều này? Làm cách nào để sao chép mảng trong PHP?Hàm getArrayCopy() của lớp ArrayObject trong PHP được sử dụng để tạo một bản sao của ArrayObject này . Hàm này trả về bản sao của mảng có trong ArrayObject này.
Mảng PHP có được truyền theo tham chiếu hoặc giá trị không?Đối với câu hỏi đầu tiên của bạn, mảng được truyền theo tham chiếu TRỪ KHI nó được sửa đổi trong phương thức/hàm bạn đang gọi . Nếu bạn cố gắng sửa đổi mảng trong phương thức/hàm, một bản sao của nó sẽ được tạo trước và sau đó chỉ bản sao được sửa đổi.
Chúng ta có thể chuyển mảng làm đối số trong PHP không?Bạn có thể truyền một mảng làm đối số . Nó được sao chép theo giá trị (hoặc COW'd, về cơ bản có nghĩa giống với bạn), vì vậy bạn có thể array_pop() (và tương tự) tất cả những gì bạn thích trên đó và sẽ không ảnh hưởng đến bất kỳ thứ gì bên ngoài. hàm sendemail($id, $userid){ //. }
Làm cách nào tôi có thể nối một mảng vào một mảng khác trong PHP?Sử dụng hàm array_push() , cái thứ hai sẽ được hợp nhất với cái thứ nhất. Trong hàm này, mảng thứ hai sẽ được thêm vào vị trí tiếp theo của mảng đầu tiên. Mảng hoàn chỉnh sẽ được đặt ở vị trí tiếp theo. $array1 = mảng(1, 2, 3, 4); |
Bài Viết Liên Quan
Bbia 02 giá bao nhiêu?
Chắc hẳn son là một sản phẩm không thể thiếu trong bộ đồ makeup của các chị em. Và hiện nay trên thị trường có rất nhiều dòng son để chị em thỏa mái ...
Làm cách nào để đếm số lần xuất hiện của từng ký tự trong một chuỗi trong JavaScript?
Thông thường trong lập trình, mọi nhà phát triển cần đếm từng lần xuất hiện của một ký tự trong chuỗi hoặc câu trong một số tình huống. Trong bài viết ...
Thay đổi màu chữ trong php
Hôm nay chúng ta sẽ tìm hiểu cách điều chỉnh Font chữ, màu chữ và cỡ chữ sao cho phù hợp với nội dung của trang web, cũng như làm nổi bật một số từ ...
Tuyển dụng bóng đá trường trung học Oregon 2023
Trong vài năm qua, tôi có xu hướng ở lại làn đường của mình. Có nghĩa là chủ yếu thực hiện các lựa chọn có lợi cho Oregon đối với các mục tiêu chính ...
Làm thế nào để bạn trả về một danh sách từ một lớp trong python?
Trong bài học này, bạn sẽ tìm hiểu về các phương thức tích hợp bổ sung, không giống như các phương thức trong bài học trước, có các giá trị trả về.pop() ...
Tại sao vòng lặp while của tôi không hoạt động Python?
Vòng lặp While trong Python được sử dụng để thực thi lặp đi lặp lại một khối câu lệnh cho đến khi một điều kiện nhất định được thỏa mãn. Và khi ...
Dữ liệu có thể được phân loại thành bao nhiêu nhóm trong python
Trong số này, bước tách là đơn giản nhất. Trên thực tế, trong nhiều tình huống, chúng tôi có thể muốn chia tập dữ liệu thành các nhóm và làm gì đó với ...
Python cho AI và ML
Nếu bạn mới bắt đầu làm quen với thế giới trí tuệ nhân tạo (AI), thì Python là một ngôn ngữ tuyệt vời để học vì hầu hết các công cụ đều được ...
Javascript kiểm tra xem số có phải là lũy thừa của 2 không
Mục lụcTrong hướng dẫn này, chúng ta sẽ xem cách kiểm tra xem số có phải là lũy thừa của hai hay khôngCó nhiều cách để kiểm tra xem một số có phải là lũy ...
Bạn có thể biên dịch python thành assembly không?
Tiết lộ. Bài đăng này có thể chứa các liên kết liên kết, nghĩa là khi bạn nhấp vào liên kết và mua hàng, chúng tôi sẽ nhận được hoa hồngBộ xử lý ...
Máy tính công thức Pascals
Chào mừng bạn đến với máy tính tam giác Pascal của chúng tôi, nơi bạn sẽ tìm hiểu cách sử dụng tam giác Pascal, cũng như lý do tại sao bạn nên sử dụng nó ...
3 tỷ Việt Nam bằng bao nhiêu USD
Bộ chuyển đổi Đô la Mỹ/Đồng Việt Nam được cung cấp mà không có bất kỳ bảo hành nào. Giá có thể khác với giá của các tổ chức tài chính như ngân ...
Cách hiển thị dữ liệu json trong bảng html bằng javascript?
Định dạng JSON được sử dụng nhiều để lưu trữ dữ liệu theo cách có cấu trúc. Ngay cả dữ liệu nhận được từ máy chủ cũng ở định dạng JSON. Ở ...
Có bao nhiêu tháng cho đến ngày 4 tháng 8 năm 2023
Có 193 ngày cho đến ngày 4 tháng 8Khoảng thời gian từ ngày 23 tháng 1 năm 2023 đến ngày 4 tháng 8 năm 2023Ngày này cách đây 6 tháng 11 ngày. Hơn hai mươi bảy tuần ...
Sử dụng biến trong đường dẫn tệp python
Bởi vì trình bao mặc định của bạn trong Terminal là zsh. So sánh những điều sau đây (_______74_______ in tên của shell hiện tại)user-166% echo $0 zsh user-166% ...
Chức năng ngủ trong PHP là gì?
Khi bạn muốn tạm dừng thực thi trong tập lệnh của mình, có hai cách để bạn triển khai mã. Một số người (rất may là rất ít) chọn tùy chọn đầu tiên và ...
Gốc sudo mysql
Nội dungTrong bài hướng dẫn này mình sẽ chỉ các bạn cách cài đặt MySQL trên Ubuntu 20. 04You can you likeCài đặt WireGuard với Docker Compose trên Ubuntu 22. 04Hướng ...
Làm cách nào để bạn thêm nhiều đối tượng trong javascript?
Các mảng JavaScript đi kèm với một phương thức sắp xếp tích hợp. Phương thức sắp xếp này chuyển đổi các phần tử mảng thành chuỗi và thực hiện sắp ...
Thêm dấu phẩy vào mảng python
Sử dụng phương pháp str.join() để chuyển đổi danh sách thành chuỗi được phân tách bằng dấu phẩy, e. g. my_str = ,.join(my_list). Phương thức str.join() sẽ nối ...
Làm cách nào để sử dụng phạm vi trong vòng lặp PHP?
Một vòng lặp foreach trong PHP là hoàn hảo để lặp qua các phần tử của một mảng được lập chỉ mục hoặc một mảng kết hợp. Vòng lặp sẽ bắt đầu từ ...