php - 在类中使用公共(public)函数回调的数组映射

标签 php class methods array-map

class something{   
    public function add_val( $val ){
    $array = array();
    foreach( $val as $value ) {
        $array[] = static::$post[${$value}];
    }
    return $array;
    }
    pulblic function somethingelse(){
       .... 
       ....
       $optionsArray['value'] = array_map( 'add_val', array_chunk( $drop_val, count( $optionsArray['heading_x'] ) ) );
       ....
       ....
    }
}

如何使用 array_map() 在另一个中调用 add_val 方法??

最佳答案

使用包含对象和方法名称的数组:

$optionsArray['value'] = array_map(array($this, 'add_val'), array_chunk($drop_val, count($optionsArray['heading_x'])));

您对大多数其他将回调作为参数的函数执行相同的操作,例如 array_walk()call_user_func()call_user_func_array() 等等。

它是如何工作的?好吧,如果您将一个数组传递给回调参数,PHP 会做一些类似的事情(对于 array_map()):

if (is_array($callback)) {         // array($this, 'add_val')
    if (is_object($callback[0])) {
        $object = $callback[0];    // The object ($this)
        $method = $callback[1];    // The object method name ('add_val')

        foreach ($array as &$v) {
            // This is how you call a variable object method in PHP
            // You end up doing something like $this->add_val($v);
            $v = $object->$method($v);
        }
    }
}

// ...

return $array;

在这里您可以看到 PHP 只是循环遍历您的数组,对每个值调用方法。没什么复杂的;同样只是基本的面向对象代码。

这可能是也可能不是 PHP 内部的工作方式,但在概念上是相同的。

关于php - 在类中使用公共(public)函数回调的数组映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4767704/

相关文章:

java - 在一个要求从日期中分辨日期的问题中获得意外输出

algorithm - 设置值使用逻辑

php - 这是什么数据类型要保存在 mysql 1 - 4.9

php - 对 URL 进行编码,包括其在 php 中的路径

python-3.x - 在 Tkinter 的 MCV 设计模式中,控制窗口属性的函数应该放在哪里?

python - 继承在 Python 中实际上做了什么?

php - 如何在cakephp中对自定义查询结果进行分页

php - 从 Propel ORM 捕获 SQL 通知

java - 让接口(interface)提供实现它的类的实例

java - 实例化接口(interface)时如何实现自己的方法?