为啥我不能在 PHP 类的嵌套数组中附加元素? [复制]

Posted

技术标签:

【中文标题】为啥我不能在 PHP 类的嵌套数组中附加元素? [复制]【英文标题】:Why can't I append an element in a PHP class' nested array? [duplicate]为什么我不能在 PHP 类的嵌套数组中附加元素? [复制] 【发布时间】:2021-10-29 00:34:06 【问题描述】:

我有一个php class containing a 2-dimensional array:

      class ArrApp
      
        private $cms = [
                         'S' => 'A',
                         'V' => []
                       ];

        ...
      

该类有一个方法可以在内部数组中追加指定元素:

        public function App($elm)
        
          $V = $this->cms[0]['V'];

          array_push($V, $elm);
          $this->Prt();
        

Prt() 方法只是打印外部数组:

        public function Prt()
        
          print_r($this->cms);
          echo '<br>';
        

我实例化该类并尝试在内部数组中附加一个元素:

      $aa = new ArrApp();
      $aa->Prt();

      $aa->App(1);
      $aa->Prt();

但是,O/P 显示一个空的内部数组:

数组 ( [S] => A [V] => 数组 ( ) ) 数组 ( [S] => A [V] => 数组 ( ) ) 数组 ( [S] => A [V] => 数组 ( ) )

    为什么会这样?是否与“按值传递”/“按引用传递”问题有关? 我该如何解决这个问题?

【问题讨论】:

PHP 中的数组不是通过引用传递的,将它们分配给另一个变量会创建一个副本 [on write]。 【参考方案1】:

您尝试访问关联数组中的元素 0,但您不能这样做。

public function App($elm) 
    $V = $this->cms[0]['V']; // here

【讨论】:

穆勒,谢谢。我解决了这个问题,它可以工作。

以上是关于为啥我不能在 PHP 类的嵌套数组中附加元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能从将一个列表附加到另一个列表中获取元素

为啥bash只将第一个元素附加到数组

为啥我不能将属性转换为嵌套元素?

为啥这个 html 附加结构与数组结构不同

为啥嵌套的子类可以访问其父类的私有成员,而孙子却不能?

为啥我不能在外部定义嵌套类?