【问题标题】:How to remove scalar property from an object?如何从对象中删除标量属性?
【发布时间】:2020-02-21 20:12:46
【问题描述】:

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

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

但它会自动在对象中添加一个新属性scalar。怎么去掉?

【问题讨论】:

  • 只做$object = new stdClass; 或者如果你有一个值数组,只做$object = (object)$array;
  • 没有。 stdClass 不适用于 laravel。
  • 也许他已经在与\ @AbraCadaver 不同的命名空间中
  • @N69S:那么学习 PHP 和命名空间将是一个开始 ;-)
  • @AbraCadaver 你也可以更准确地说做new \stdClass()

标签: php arrays object


【解决方案1】:

你可以按照传统的方式来做

$object = new \stdClass();

或使用空转换

$object = (object)null;

如果你已经有一个数组,你可以将它转换为对象

$object = (object)$array;

【讨论】:

    【解决方案2】:

    你可以用new实例化一个对象stdClass

    $object = new stdClass();
    $object->vehicleId = $vehicleId;
    

    【讨论】:

      【解决方案3】:

      根据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) {}
      

      另一种方法是将 null 值强制转换为 N69S 所示的对象:

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

      当然你也可以将关联数组转换为对象:

      $object = (object)['a' => 123];
      
      // object(stdClass)#1 (1) {
      //   ["a"]=>
      //  int(123)
      // }
      

      【讨论】:

        猜你喜欢
        • 2011-05-09
        • 2022-07-06
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 2021-09-11
        • 1970-01-01
        • 2016-08-12
        相关资源
        最近更新 更多