Класс stdClass

(PHP 4, PHP 5, PHP 7, PHP 8)

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠŸΡƒΡΡ‚ΠΎΠΉ класс ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния с динамичСскими свойствами.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ стандартного класса ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new ΠΈΠ»ΠΈ ΠΏΡƒΡ‚Ρ‘ΠΌ привСдСния ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ значСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Ряд PHP-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚ΠΎΠΆΠ΅ создаёт экзСмпляры этого класса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, json_decode(), mysqli_fetch_object() ΠΈΠ»ΠΈ PDOStatement::fetchObject().

Класс ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ динамичСскиС свойства ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° #[\AllowDynamicProperties], хотя Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ магичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² __get() ΠΈ __set().

Π­Ρ‚ΠΎ Π½Π΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PHP Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ понятия ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса. ΠŸΡ€ΠΈ этом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ класс stdClass ΠΈ поэтому унаслСдуСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ динамичСских свойств.

ΠžΠ±Π·ΠΎΡ€ класса

#[\AllowDynamicProperties]
class stdClass {
}

Класс Π½Π΅ содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ свойств ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ значСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°

<?php

$obj
= (object) array('foo' => 'bar');
var_dump($obj);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

object(stdClass)#1 (1) {
  ["foo"]=>
  string(3) "bar"
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ json_decode()

<?php

$json
= '{"foo":"bar"}';
var_dump(json_decode($json));

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

object(stdClass)#1 (1) {
  ["foo"]=>
  string(3) "bar"
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #3 ОбъявлСниС динамичСских свойств

<?php

$obj
= new stdClass();
$obj->foo = 42;
$obj->{1} = 42;
var_dump($obj);

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

object(stdClass)#1 (2) {
  ["foo"]=>
  int(42)
  ["1"]=>
  int(42)
}
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 1 note

up
17
Mats M ΒΆ
3 years ago
In PHP8 this has been changed

https://www.php.net/manual/en/migration80.incompatible.php

A number of warnings have been converted into Error exceptions:

Attempting to write to a property of a non-object. Previously this implicitly created an stdClass object for null, false and empty strings.

So if you add properties to a $var, you first need to make it a stdClass()

$var = new stdClass();
$var->propp1 = "nice";
$var->propp2 = 1234;