Почему PHP compact() использует строки вместо реальных переменных? - программирование
Подтвердить что ты не робот

Почему PHP compact() использует строки вместо реальных переменных?

Может ли кто-нибудь объяснить преимущества функции compact() PHP, принимающей строку "переменная с этим именем" вместо фактической переменной?

Например:

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

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

Почему мне нужно передать строку имени переменной вместо того, чтобы просто передать эту переменную и обработать PHP, сопоставляя это с массивом? Например:

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

Ответ 1

Поскольку функция compact() должна знать имена переменных, так как она будет использовать их как ключи массива. Если вы передадите переменные напрямую, то compact() не будет знать их имена и не будет иметь никакого значения для возвращаемых ключей массива.

Однако я предлагаю создать массив вручную:

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

Я считаю compact() устаревшим и избегаю использовать его в любом новом коде.

Ответ 2

Что касается преимуществ, я нашел compact() полезным в приложениях MVC. Если вы пишете код контроллера и вам нужно передать ассоциативный массив переменных и их видимые имена, которые вы установили в своем контроллере, это сократит что-то вроде:

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

к

View::make('home')->with(compact('products', 'title', 'filter'));

Ответ 3

compact - это функция, а не языковая конструкция. Невозможно, чтобы функции PHP знали имена переданных им переменных. Теоретически compact может быть реализована как языковая конструкция, такая как unset или isset, и работать так, как вы описали. Но это не то, что произошло.