【问题标题】:php - array map using public function callback within classphp - 在类中使用公共函数回调的数组映射
【发布时间】:2011-06-13 15:41:38
【问题描述】:
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 方法??

【问题讨论】:

    标签: php class methods array-map


    【解决方案1】:

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

    $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 内部的做法,但从概念上讲是一样的。

    【讨论】:

    • 如何传递数组中的变量以外的变量? array($this, 'add_val($p)')
    • @Phil: $this->add_val($p),回到基本的 PHP OOP。
    • 我不确定这里发生了什么。 array_map 中的第一个 permitter 是做什么的?
    • @Phil:看看我的解释是否有帮助。
    • 这是一个破解的解释。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2023-04-09
    • 2016-03-28
    • 2012-03-31
    • 1970-01-01
    相关资源
    最近更新 更多