Làm cách nào để sử dụng đối tượng stdClass trong PHP?

Một thủ thuật rất ngắn và đơn giản để tạo các đối tượng stdClass mới mà không phải đặt từng thuộc tính riêng lẻ. Điều này gần giống với ký hiệu đối tượng của JavaScript, nhưng không hoàn toàn thanh lịch

Tạo một đối tượng mới trong JavaScript giống như ví dụ sau

const x = {
    a: 'test',
    b: 'test2',
    c: 'test3'
};

Với PHP, có thể sử dụng ép kiểu để chuyển đổi một mảng đơn giản thành một đối tượng stdClass, cung cấp cho bạn cú pháp tìm kiếm tương tự mặc dù yêu cầu gõ nhiều hơn một chút

$x = (object) [
    'test',
    'test2',
    'test3',
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  [0]=>
  string(4) "test"
  [1]=>
  string(5) "test2"
  [2]=>
  string(5) "test3"
}
*/

Lưu ý kiểu truyền với

$x = (object) [
    'test',
    'test2',
    'test3',
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  [0]=>
  string(4) "test"
  [1]=>
  string(5) "test2"
  [2]=>
  string(5) "test3"
}
*/
0 ngay trước định nghĩa mảng - đây là công việc chuyển đổi định nghĩa mảng đơn giản thành đối tượng stdClass

Tất nhiên, bạn cũng sẽ muốn các thuộc tính được đặt tên và việc truyền một mảng kết hợp một cách khéo léo sẽ làm được điều đó

$x = (object) [
    'a' => 'test',
    'b' => 'test2',
    'c' => 'test3'
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  ["a"]=>
  string(4) "test"
  ["b"]=>
  string(5) "test2"
  ["c"]=>
  string(5) "test3"
}
*/

Điều gì sẽ xảy ra nếu bạn có hai chỉ mục mảng có cùng khóa? . Vâng, đây là PHP, bạn có thể không ngạc nhiên khi thấy những điều sau đây

$x = (object) [
    'a' => 'test',
    'b' => 'test2',
    'c' => 'test3',
    'a' => 'wipeout'
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  ["a"]=>
  string(7) "wipeout"
  ["b"]=>
  string(5) "test2"
  ["c"]=>
  string(5) "test3"
}
*/

Không có vụ va chạm lớn nào. PHP chỉ cần ghi đè giá trị thuộc tính (trong trường hợp này là ____12) bằng giá trị cuối cùng của khóa ____13 trong mảng. Đây là lý do tại sao

$x = (object) [
    'test',
    'test2',
    'test3',
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  [0]=>
  string(4) "test"
  [1]=>
  string(5) "test2"
  [2]=>
  string(5) "test3"
}
*/
2 được đặt thành
$x = (object) [
    'test',
    'test2',
    'test3',
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  [0]=>
  string(4) "test"
  [1]=>
  string(5) "test2"
  [2]=>
  string(5) "test3"
}
*/
1 chứ không phải
$x = (object) [
    'test',
    'test2',
    'test3',
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  [0]=>
  string(4) "test"
  [1]=>
  string(5) "test2"
  [2]=>
  string(5) "test3"
}
*/
2

Ngoài ra, lưu ý ở đây rằng thứ tự của các thuộc tính trong stdClass có thể không như bạn mong đợi. Có lẽ bạn đang mong đợi

$x = (object) [
    'test',
    'test2',
    'test3',
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  [0]=>
  string(4) "test"
  [1]=>
  string(5) "test2"
  [2]=>
  string(5) "test3"
}
*/
2 đứng cuối cùng, nhưng không có
$x = (object) [
    'test',
    'test2',
    'test3',
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  [0]=>
  string(4) "test"
  [1]=>
  string(5) "test2"
  [2]=>
  string(5) "test3"
}
*/
2 nào đứng trước vì
$x = (object) [
    'test',
    'test2',
    'test3',
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  [0]=>
  string(4) "test"
  [1]=>
  string(5) "test2"
  [2]=>
  string(5) "test3"
}
*/
6 được đặt so với stdClass và sau đó nó bị ghi đè (chứ không phải thay thế) bằng định nghĩa sau này
$x = (object) [
    'test',
    'test2',
    'test3',
];
var_dump($x);

/*
object(stdClass)#1 (3) {
  [0]=>
  string(4) "test"
  [1]=>
  string(5) "test2"
  [2]=>
  string(5) "test3"
}
*/
8

Vậy là bạn đã có nó - một cách rất đơn giản để có cho mình một stdClass mới với bộ thuộc tính mong muốn của bạn

Làm cách nào để sử dụng stdClass trong PHP?

Lớp stdClass ¶ . Các đối tượng của lớp này có thể được khởi tạo bằng toán tử new hoặc được tạo bằng cách chuyển kiểu chữ tới đối tượng . Một số hàm PHP cũng tạo các thể hiện của lớp này, e. g. json_decode(), mysqli_fetch_object() hoặc PDOStatement. tìm nạpObject().

Làm cách nào để xác định một đối tượng stdClass trong PHP?

StdClass là lớp trống trong PHP được sử dụng để truyền các loại khác thành đối tượng. Nó tương tự như đối tượng Java hoặc Python. stdClass không phải là lớp cơ sở của các đối tượng. .
stdClass truy cập trực tiếp các thành viên bằng cách gọi họ
Nó rất hữu ích trong đối tượng động
Nó được sử dụng để thiết lập các thuộc tính động, v.v.

Làm cách nào để truy cập một đối tượng trong PHP?

Cách tiếp cận thiết thực nhất chỉ đơn giản là chuyển đối tượng mà bạn quan tâm trở lại một mảng , điều này sẽ cho phép bạn truy cập các thuộc tính. $an = mảng('123' => '123', '123 foo' => '123 foo'); .

Làm cách nào để gọi một đối tượng trong PHP?

Để gọi một phương thức trên một đối tượng, bạn chỉ cần gọi tên đối tượng theo sau là "->" rồi gọi phương thức đó . Vì đó là một câu lệnh, bạn đóng nó bằng dấu chấm phẩy. Khi bạn đang xử lý các đối tượng trong PHP, "->" hầu như luôn được sử dụng để truy cập đối tượng đó, cho dù đó là một thuộc tính hay để gọi một phương thức.