将params传递给内在功能

时间:2015-11-02 13:31:12

标签: php codeigniter

为什么 $ poll_id param在array_map的回调中是NULL(未定义)?下面的代码有效,但我必须使用特殊的私有 $ id 类成员来克服它......

class Polls_model extends CI_Model
{

    private $id;

    // ...

    public function add_poll_answers($poll_id, $answers)
    {
        $this->id = $poll_id;

        if (count($answers) > 0)
        {
            $this->db->insert_batch('poll_answers', 
                array_map(
                    function ($a)
                    {
                        log($poll_id); // NULL, why?
                        log($this->id); // correct value
                        return ['name' => $a,'poll_id' => $this->id];
                    }, $answers));
        }
    }
}

1 个答案:

答案 0 :(得分:4)

变量$ poll_id为null,因为它的作用域是本地的。 你可以使用php闭包:

function ($a) use ($poll_id)
{
    log($poll_id); // NULL, why?
    log($this->id); // correct value
    return ['name' => $a,'poll_id' => $this->id];
}, $answers));

http://php.net/manual/de/functions.anonymous.php