【问题标题】:calling function from within class with array_walk_recursive使用 array_walk_recursive 从类中调用函数
【发布时间】:2011-08-09 00:21:46
【问题描述】:

这是我在 php 中的一个类的简化版本:

class someClass {
   public function edit_array($array) {
      array_walk_recursive($array, 'edit_value');
   }
   public function edit_value(&$value) {
      //edit the value 
   }
}

现在将类中的函数名称发送到 array_walk_recursive 显然不起作用。但是,除了使用循环重新创建 array_walk_recursive 之外,还有其他解决方法吗(我将把它保存为最后的手段)?提前致谢!

【问题讨论】:

    标签: php arrays class function recursion


    【解决方案1】:

    你也可以内联..

    array_walk_recursive($myArray, function (&$item){
       $item = mb_convert_encoding($item, 'UTF-8');
    });
    

    【讨论】:

      【解决方案2】:

      试试:

      class someClass {
         static public function edit_array($array) {
            array_walk_recursive($array, array(__CLASS__,'edit_value'));
         }
         static public function edit_value(&$value) {
            //edit the value 
         }
      }
      

      注意:我使用了__CLASS__,以便更改类名不会妨碍执行。你也可以改用"someClass"

      或者在某些情况下:

      class someClass {
         public function edit_array($array) {
            array_walk_recursive($array, array($this,'edit_value'));
         }
         public function edit_value(&$value) {
            //edit the value 
         }
      }
      

      【讨论】:

      • CLASS 仅在您尝试静态调用时才需要。
      【解决方案3】:

      您的方法未定义为静态的,因此我假设您正在实例化。这种情况下,你可以通过$this

      public function edit_array($array) {
          array_walk_recursive($array, array($this, 'edit_value'));
      }
      

      【讨论】:

      • 这是更好的答案。接受的答案并没有真正回答问题,只是为静态类提供了一个替代方案,这有时是不可取的。
      • 不错的解决方案!
      【解决方案4】:

      函数需要被静态引用。我成功使用了这段代码:

      <?php
      
      class someClass {
         public function edit_array($array) {
            array_walk_recursive($array, 'someClass::edit_value');
         }
         public static function edit_value(&$value) {
            echo $value; 
         }
      }
      
      $obj = new SomeClass();
      
      $obj->edit_array(array(1,2,3,4,5,6,7));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-27
        • 1970-01-01
        • 1970-01-01
        • 2011-12-07
        • 2016-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多