如何从对象中删除标量属性?

时间:2019-10-25 13:08:33

标签: php arrays object

我正在尝试从值数组创建新对象。 我不知道创建新的object。 所以我添加了以下几行。

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

但是它会自动在对象中添加一个新属性scalar。如何删除它?

3 个答案:

答案 0 :(得分:0)

您可以使用const index = require('./index') var AWS = require('aws-sdk-mock'); const AWS_SDK = require('aws-sdk'); AWS.mock('StepFunctions', 'startExecution', function (params, callback){ callback(null, "successfully started the execution"); }); const isTest = process.env.JEST_WORKER_ID; const config = { convertEmptyValues: true, ...(isTest && {endpoint: 'localhost:8000', sslEnabled: false,region:'local-env'}) }; describe('Test Step Function Invocation', function () { it('verifies successful response', async () => { process.env.StateMachineARN = 'arn:aws:states:us-east-1:12345678:stateMachine:Testing'; var event = { "payload": "my_payload", "data": "some-data", "MVId": "00156" }; const result = await index.handler(event,{},config); expect(result.statusCode).toEqual(200); expect(result.body).toBe(event); }); }); AWS.restore('StepFunctions'); 实例化对象stdClass

new

答案 1 :(得分:0)

您可以按照常规方式进行操作

$object = new \stdClass();

或具有空转换

$object = (object)null;

如果已经有了数组,则可以将其转换为对象

$object = (object)$array;

答案 2 :(得分:0)

按照PHP Manual

  

如果将对象转换为对象,则不会对其进行修改。如果将任何其他类型的值转换为对象,则将创建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)
// }