使用array_walk_recursive从类中调用函数

Fel*_* Mc 15 php arrays recursion class function

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

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

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

web*_*ave 24

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

public function edit_array($array) {
    array_walk_recursive($array, array($this, 'edit_value'));
}
Run Code Online (Sandbox Code Playgroud)

  • 这是更好的答案。接受的答案并没有真正回答问题,只是为静态类提供了一种替代方案,这有时是不可取的。 (2认同)

ohm*_*ama 20

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

<?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));
Run Code Online (Sandbox Code Playgroud)


Chr*_*ian 7

尝试:

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 
   }
}
Run Code Online (Sandbox Code Playgroud)

注意:我使用过,__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 
   }
}
Run Code Online (Sandbox Code Playgroud)