【问题标题】:How can I remove a private property from an array of object?如何从对象数组中删除私有属性?
【发布时间】:2021-02-24 06:53:35
【问题描述】:
$array = $this->em->getRepository($entity)->filter($id);

我正在创建一个数组:

array:24 [▼
  0 => Members^ {#543 ▼
    -id: 1
    -username: "lio"
    -email: "info@somepage.com"
    -isActive: true
    -name: "Lio"
    -projects: PersistentCollection^ {#590 ▶}
    -pages: PersistentCollection^ {#615 ▶}
  }
  1 => Members^ {#135029 ▶}
  2 => Members^ {#125937 ▶}
  3 => Members^ {#1807 ▶}
  4 => Members^ {#135075 ▶}
  5 => Members^ {#135086 ▶}

我尝试从这个数组中删除对象项目:

 foreach ($array as $value) {
      dump($value->projects);
    }

我收到该对象是私有的错误消息。

我找到了这篇文章,但上面写着,我需要在类中编写一个函数。

Removing private properties of object

我的问题是,是否可以在课堂外将其删除?因为当我在类中删除它时,它总是被删除,我只想在特定情况下删除它。

【问题讨论】:

    标签: php arrays symfony object properties


    【解决方案1】:

    你应该使用getter和setter

    foreach ($array as $value) {
          dump($value->getProjects());
    }
    

    【讨论】:

    • 是的,我试过unset($value->getProjects());,但我得到了错误:Compile Error: Can't use method return value in write context
    【解决方案2】:

    这是Member 对象的数组。对象的私有属性只能通过其方法访问。您需要找到声明类Member 的文件。然后添加一个公共类方法来做unset。例如,

    class Member {
    
      // ...
      public function unsetProjects()
      {
        unset($this->projects);
      }
    
    }
    

    那么你应该可以做到这一点:

    foreach ($array as $value) {
      $value->unsetProjects();
    }
    

    【讨论】:

    • 我现在尝试像这样使用它foreach ($array as $value) {unsetProjects($value);},但我收到一条错误消息Attempted to call function "unsetProjects" from namespace "App\Service".
    • 对不起。我假设你对面向对象编程有一定的了解。更新了我的答案,向您展示如何调用对象实例的方法。
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 2021-06-18
    • 2021-01-30
    • 2018-07-01
    • 2021-09-29
    • 2017-06-11
    • 2013-05-05
    • 1970-01-01
    相关资源
    最近更新 更多