34

谁能解释 PHP 的compact()函数接受“具有该名称的变量”字符串而不是实际变量的好处?

例如:

$foo = 'foo';
$bar = 'bar';

$compacted = compact('foo', 'bar');

为什么我需要传递变量名的字符串,而不是只传递变量本身和 PHP 处理将其映射到数组?像这样:

$compacted = compact($foo, $bar);
4

3 回答 3

39

就好处而言,我发现 compact() 在 MVC 应用程序中很有用。如果您正在编写控制器代码,并且需要将您在控制器中设置的变量关联数组及其明显名称传递给视图,则它会缩短如下内容:

View::make('home')->with(array('products' => $products, 'title' => $title, 'filter' => $filter'));

View::make('home')->with(compact('products', 'title', 'filter'));
于 2014-03-09T03:40:08.630 回答
33

因为compact()函数需要知道变量的名称,因为它将使用它们作为数组键。如果您直接传递变量,则compact()不会知道它们的名称,并且不会有任何值可用于返回的数组键。

但是,我建议手动构建数组:

$arr = array(
    'foo' => $foo,
    'bar' => $bar);

我认为compact()已弃用,并会避免在任何新代码中使用它。

于 2013-05-01T14:22:13.897 回答
17

compact是一个函数而不是一个语言结构。PHP 函数无法知道传递给它们的变量的名称。从理论上讲,compact可以实现为类似unsetor的语言结构,isset并按照您描述的方式工作。但事实并非如此。

于 2013-05-01T14:28:15.527 回答