php extract () использование и цель

Я (думаю), я понимаю функцию php’s extract (). Тем не менее, я читал некоторый код и увидел что-то вроде этого:

extract(['a' => '', 'b' => '', 'c' => 1, 'd' => 0]);

Мои вопросы:

1: Это функционально отличается от:

$a = ''; $b = ''; $c = 1; $d = 0;

2: Каковы причины объявления / назначения переменных с использованием extract ()?

1

Решение

Это функционально отличается от …

Никакие обе строки кода не являются эквивалентными. extract возвращает значения, в которых ключу присваивается имя переменной, а значением является то, чему равна эта переменная, что изображено в каждой строке кода, что делает их функционально эквивалентными.

Каковы причины объявления / назначения переменных с использованием extract ()?

Разумный вариант использования будет использовать extract на функцию, которая возвращает массив значений с известными ключами. Это экономит ваше время при написании строки декларации для каждого сохраненного значения. Я говорю известные ключи, потому что хотя использование неизвестных ключей возможно через использование array_keys а также variable variables, делая это, вы начинаете входить в область сомнительных методов кодирования.

В документации extract в нем говорится: «Не использовать extract () для ненадежных данных …», которые включают введенные пользователем данные, которые могли быть злонамеренно изменены. Хотя это означает использование extract $ _POST не подходит для общедоступной версии, функционально нет ничего плохого в том, чтобы делать это для тестирования или личного проекта, где вы можете гарантировать, что значения $ _POST соответствуют ожидаемым.

Имейте в виду, что при использовании extract и если ваша программа когда-либо потребуется поддерживать на более позднем этапе, понимая, что такое extract Оператор возвращает или найти источник переменных, которые пришли из выписки, может быть сложно. extract имеет свое применение в программах, но оно должно сопровождаться комментариями с описанием того, что он делает, чтобы сделать будущие ссылки более ясными.

1

Другие решения

Цель.
1. Может использоваться как версия list (). Но в случае extract () вам не нужно заботиться о порядке изменений.
Кроме того, переменные, которые были извлечены из массива, относятся к конкретной области видимости.
В случае использования с БД вы можете быть уверены, что переменная существует

function foo($db){
$hdl =  $db->prepare("SELECT * FROM test.first");
$hdl->execute();
$resultArray = $hdl->fetch(PDO::FETCH_ASSOC);
extract($resultArray,EXTR_PREFIX_SAME, "wddx");
echo $id . "<br>";
echo $name . "<br>";
echo $email . "<br>";
}

2. передать переменную в представления, когда вы используете MVC

//View.php
class View {
function render($filename = null) {
if ($filename !== null) {
$this->filename = $filename;
}
unset($filename);
extract($this->variables);
ob_start();
$this->returned = include($this->dir . $this->filename);
return ob_get_clean();
}
}

//test.php
$view = new View;
$view->filename = 'test.phtml';
$view->dir = './';
$view->variables = array('test' => 'tset');
echo $view->render('test.phtml');
var_dump($view->returned);

//test.phtml
<?php echo $test; ?>
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector