Как удалить скалярное свойство из объекта? - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь создать новый объект из массива значений. Я не знаю, чтобы создать новый object. Поэтому я добавил следующие строки:

$object = (object) '';
$object->vehicleId = $vehicleId;

Но он автоматически добавляет новое свойство scalar в объект. Как это убрать?

Ответы [ 3 ]

0 голосов
/ 25 октября 2019

вы можете просто сделать это обычным способом

$object = new \stdClass();

или с нулевым преобразованием

$object = (object)null;

и, если у вас уже есть массив, вы можете преобразовать его в объект

$object = (object)$array;
0 голосов
/ 25 октября 2019

Согласно Руководству по PHP :

Если объект преобразуется в объект, он не изменяется. Если значение любого другого типа преобразуется в объект, создается новый экземпляр встроенного класса stdClass. Если значение было NULL, новый экземпляр будет пустым. Массив преобразуется в объект со свойствами, названными ключами и соответствующими значениями. Обратите внимание, что в этом случае до PHP 7.2.0 числовые ключи были недоступны до тех пор, пока они не будут повторены.

Когда вы приводите строку к объекту, значение этой строки будет сохранено как атрибут. Дается имя по умолчанию, которое scalar. Даже пустая строка все еще считается имеющей значение.

В PHP у вас есть несколько способов создания пустого объекта.

Пример взят из https://www.php.net/manual/en/language.types.object.php#118679

<?php
$obj1 = new \stdClass; // Instantiate stdClass object
$obj2 = new class{}; // Instantiate anonymous class
$obj3 = (object)[]; // Cast empty array to object

var_dump($obj1); // object(stdClass)#1 (0) {}
var_dump($obj2); // object(class@anonymous)#2 (0) {}
var_dump($obj3); // object(stdClass)#3 (0) {}

Другим способом было бы привести нулевое значение к объекту, как показано в N69S:

$object = (object)null; // Same as (object)[]

И, конечно, вы можете преобразовать ассоциативный массив в объект:

$object = (object)['a' => 123];

// object(stdClass)#1 (1) {
//   ["a"]=>
//  int(123)
// }
0 голосов
/ 25 октября 2019

Вы можете создать экземпляр объекта stdClass с помощью new:

$object = new stdClass();
$object->vehicleId = $vehicleId;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...