任何人都可以解释PHP的compact()函数接受"具有该名称的变量"而不是实际变量的字符串的好处吗?
例如:
$foo = 'foo';
$bar = 'bar';
$compacted = compact('foo', 'bar');
Run Code Online (Sandbox Code Playgroud)
为什么我需要传递一个变量名字符串而不是只传递变量本身和PHP处理映射到一个数组?像这样:
$compacted = compact($foo, $bar);
Run Code Online (Sandbox Code Playgroud)
And*_*rew 36
至于好处,我发现compact()在MVC应用程序中很有用.如果您正在编写控制器代码,并且需要将您在控制器中设置的变量及其明显名称的关联数组传递给视图,则会缩短以下内容:
View::make('home')->with(array('products' => $products, 'title' => $title, 'filter' => $filter'));
Run Code Online (Sandbox Code Playgroud)
至
View::make('home')->with(compact('products', 'title', 'filter'));
Run Code Online (Sandbox Code Playgroud)
cdh*_*wie 24
因为compact()函数需要知道变量的名称,因为它将把它们用作数组键.如果直接传递变量compact(),则不知道它们的名称,并且没有任何值可用于返回的数组键.
但是,我建议手动构建数组:
$arr = array(
'foo' => $foo,
'bar' => $bar);
Run Code Online (Sandbox Code Playgroud)
我认为compact()已弃用,并且会避免在任何新代码中使用它.
cle*_*ong 11
compact是一种功能而不是语言结构.PHP函数无法知道传递给它们的变量的名称.从理论上讲,compact可以作为一种语言结构实现,unset或者像isset你描述的那样工作.但事实并非如此.