是否可以使用闭包来封装?

时间:2017-05-23 07:44:21

标签: php closures

我正在使用这样的代码:

$a = [];
$a['a'] = 1;
$text1 = [];
foreach ($b as $item)
{
    $text1[] = $item['1'];
}
$a['text1'] = implode(',', $text1);

$text2 = [];
foreach ($b as $item)
{
    $text2[] = $item['2'];
}
$a['text2'] = implode(',', $text2);

我的同事这样重写:

$a = [];
$a['a'] = 1;
$a['text1'] = call_user_func(function() use ($b) {
    $text1 = [];
    foreach ($b as $item)
    {
        $text1[] = $item['1'];
    }
    return implode(',', $text1);
}();

$a['text2'] = call_user_func(function() use ($b) {
    $text2 = [];
    foreach ($b as $item)
    {
        $text2[] = $item['2'];
    }
    return implode(',', $text2);
}();

他的理由:它增加了封装,在我的第一个例子中,将会有“漫步”变量($text1$text2),除非我取消它们。

1 个答案:

答案 0 :(得分:2)

是的,我同意你的同事 - 使用闭包来封装代码是有意义的。

然而,你在那里的所有东西都可以简化为:

<?php

$a = [
    'a' => 1,
    'text1' => implode(',', array_column($b, '1')),
    'text2' => implode(',', array_column($b, '2')),
];

供参考,见: