Điều này phải đơn giản, nhưng dường như tôi không thể tìm thấy câu trả lời ....
Tôi có một đối tượng STDCLASS chung
$foo = new StdClass[];
$foo->bar = '1234';
5 không có thuộc tính. Tôi muốn thêm một thuộc tính mới $foo = new StdClass[];
$foo->bar = '1234';
6 vào nó chưa được xác định. Nếu tôi làm điều này:$foo = new StdClass[];
$foo->bar = '1234';
PHP trong chế độ nghiêm ngặt phàn nàn.
Cách thích hợp [bên ngoài khai báo lớp] để thêm thuộc tính vào một đối tượng đã khởi tạo là gì?
Lưu ý: Tôi muốn giải pháp hoạt động với đối tượng PHP chung của loại stdclass.
Một chút nền tảng về vấn đề này. Tôi đang giải mã một chuỗi JSON là một loạt các đối tượng JSON.
$foo = new StdClass[];
$foo->bar = '1234';
7 tạo ra một mảng đối tượng STDClass. Tôi cần điều khiển các đối tượng này và thêm một thuộc tính cho từng đối tượng.
Hakre
187K48 Huy hiệu vàng419 Huy hiệu bạc804 Huy hiệu đồng48 gold badges419 silver badges804 bronze badges
hỏi ngày 23 tháng 7 năm 2012 lúc 18:32Jul 23, 2012 at 18:32
4
Nếu bạn hoàn toàn phải thêm thuộc tính vào đối tượng, tôi tin rằng bạn có thể chọn nó dưới dạng mảng, thêm thuộc tính của bạn [làm khóa mảng mới], sau đó chọn nó trở lại làm đối tượng. Lần duy nhất bạn chạy vào các đối tượng
$foo = new StdClass[];
$foo->bar = '1234';
8 [tôi tin] là khi bạn chọn một mảng làm đối tượng hoặc khi bạn tạo một đối tượng $foo = new StdClass[];
$foo->bar = '1234';
8 mới từ đầu [và tất nhiên là khi bạn $foo = new StdClass[];
$foo->bar = '1234';
7 điều gì đó - ngớ ngẩn tôi đã quên!].Thay vì:
$foo = new StdClass[];
$foo->bar = '1234';
Bạn sẽ làm:
$foo = array['bar' => '1234'];
$foo = [object]$foo;
Hoặc nếu bạn đã có một đối tượng STDClass hiện có:
$foo = [array]$foo;
$foo['bar'] = '1234';
$foo = [object]$foo;
Cũng như một lớp lót 1:
$foo = [object] array_merge[ [array]$foo, array[ 'bar' => '1234' ] ];
Đã trả lời ngày 23 tháng 7 năm 2012 lúc 18:45Jul 23, 2012 at 18:45
WwwwwwWWW
9.4741 Huy hiệu vàng28 Huy hiệu bạc32 Huy hiệu đồng1 gold badge28 silver badges32 bronze badges
6
Làm như thế này:
$foo = new stdClass[];
$foo->{"bar"} = '1234';
bây giờ cố gắng:
echo $foo->bar; // should display 1234
Đã trả lời ngày 15 tháng 9 năm 2015 lúc 8:55Sep 15, 2015 at 8:55
JM R.JM R.JM R.
1.5311 huy hiệu vàng9 Huy hiệu bạc1 gold badge9 silver badges4 bronze badges
7
Nếu bạn muốn chỉnh sửa JSON được giải mã, hãy thử lấy nó như một mảng kết hợp thay vì một mảng các đối tượng.
$data = json_decode[$json, TRUE];
Đã trả lời ngày 23 tháng 7 năm 2012 lúc 18:57Jul 23, 2012 at 18:57
gen_Ericgen_Ericgen_Eric
Phim thương hiệu vàng 218K4040 gold badges295 silver badges334 bronze badges
Đây là một cách khác:
$foo = [object]null; //create an empty object
$foo->bar = "12345";
echo $foo->bar; //12345
Đã trả lời ngày 17 tháng 8 năm 2016 lúc 18:18Aug 17, 2016 at 18:18
RagnarragnarRagnar
4.1431 Huy hiệu vàng25 Huy hiệu bạc39 Huy hiệu đồng1 gold badge25 silver badges39 bronze badges
Bạn nên sử dụng các phương thức ma thuật __set và __get. Ví dụ đơn giản:
class Foo
{
//This array stores your properties
private $content = array[];
public function __set[$key, $value]
{
//Perform data validation here before inserting data
$this->content[$key] = $value;
return $this;
}
public function __get[$value]
{ //You might want to check that the data exists here
return $this->$content[$value];
}
}
Tất nhiên, đừng sử dụng ví dụ này như thế này: không có bảo mật nào cả :]
Chỉnh sửa: Xem nhận xét của bạn, đây có thể là một giải pháp thay thế dựa trên sự phản ánh và một người trang trí:
$foo = new StdClass[];
$foo->bar = '1234';
0Tái bút: Tôi đã không kiểm tra mã của mình, chỉ là ý tưởng chung ...
Đã trả lời ngày 23 tháng 7 năm 2012 lúc 18:37Jul 23, 2012 at 18:37
2
Tôi không biết liệu phiên bản mới của PHP mới hơn, nhưng điều này hoạt động. Tôi đang sử dụng Php 5.6
$foo = new StdClass[];
$foo->bar = '1234';
1Đây là kết quả. Phương thức lưu thực sự có được thuộc tính mới
$foo = new StdClass[];
$foo->bar = '1234';
2Đã trả lời ngày 18 tháng 12 năm 2015 lúc 7:49Dec 18, 2015 at 7:49
GangagangaGanga
Phù hiệu bằng đồng 1133 bronze badges
1
Có, có thể tự động thêm các thuộc tính vào đối tượng PHP.
Điều này rất hữu ích khi nhận được một phần đối tượng từ JavaScript.
Phía JavaScript:
$foo = new StdClass[];
$foo->bar = '1234';
3PHP bên:
$foo = new StdClass[];
$foo->bar = '1234';
4Hoặc chỉ gửi một thuộc tính giả từ JavaScript mà bạn sẽ điền vào PHP.
Đã trả lời ngày 19 tháng 7 năm 2014 lúc 11:53Jul 19, 2014 at 11:53
Adrian Cumpanasuadrian CumpanasuAdrian Cumpanasu
1.0101 Huy hiệu vàng10 Huy hiệu bạc24 Huy hiệu đồng1 gold badge10 silver badges24 bronze badges
2