使用 array_walk_recursive 从类中调用函数

Posted

技术标签:

【中文标题】使用 array_walk_recursive 从类中调用函数【英文标题】:calling function from within class with 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 之外,还有其他解决方法吗(我将把它保存为最后的手段)?提前致谢!

【问题讨论】:

【参考方案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));

【讨论】:

以上是关于使用 array_walk_recursive 从类中调用函数的主要内容,如果未能解决你的问题,请参考以下文章

array_walk_recursive 地址引用报错的问题

PHP二维数组转换成一维数组,一个变量多个二维数组转换成一维数组,PHP二维数组(或任意维数组)转换成一维数组的方法汇总,array_reduce(); array_walk_recursive()

PHP二维数组转一维数组

php--------递归函数

PHP 将二维数组转成一维数组

PHP一句话木马研究