PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 5
re2enX Отправлено: 16 Сентября, 2017 - 19:37:32 • Тема: Извлечение переменных из массива, в локальную область видимости. • Форум: Объектно-ориентированное программирование

Ответов: 16
Просмотров: 1978
LIME
Спойлер (Отобразить)
И вам удачи! Радость
re2enX Отправлено: 16 Сентября, 2017 - 19:21:21 • Тема: Извлечение переменных из массива, в локальную область видимости. • Форум: Объектно-ориентированное программирование

Ответов: 16
Просмотров: 1978
Все пытаются объяснить мне как работает функция extract()...

LIME, Кто вас так обманул?
1. Кто сказал вам что функция extract(), "сомнительная функция"? Посмотрите исходный код symfony, laravel или flight.
2. Кто сказал вам, что переменные переменных, считается плохой практикой? Мне интересно, как вы будете писать например: интерпретатор или транслятор, насколько "правильным" и "чистым" будет ваш код без применения "переменные переменных"...

Цитата:
тс пришел в пхп после js

Радость Ходячий шар, неверных предсказаний...

ВНИМАНИЕ! Ответ на вопрос (для тех, кому это было интересно):

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. foreach ($array as $key => $value)
  4. {
  5.   $$key= $value;
  6. }
  7. ?>
  8.  


Это код полностью идентичен вызову extract() с флагом EXTR_OVERWRITE, смотрим исходный код функции extract() на С. Нет необходимости использовать unset().

Наверное, правила данного форум, запрещают давать дельные ответы...
re2enX Отправлено: 15 Сентября, 2017 - 19:27:20 • Тема: Извлечение переменных из массива, в локальную область видимости. • Форум: Объектно-ориентированное программирование

Ответов: 16
Просмотров: 1978
[quote=andrewkard][/quote]

Почему "Нет."? чем это чревато, можете объяснить? Я знаю что существует родная функция extract() <сарказм>Огромное вам спасибо, вы открыли мне глаза</сарказм>. И нет! Вопрос не отпадает, ведь получается, если у кода нет "печальных" последствий, то способ имеет право на жизнь.

Весь написанный мною код, приведен в качестве примера, общая идея ясна и прекрасно передает суть.
re2enX Отправлено: 15 Сентября, 2017 - 13:26:25 • Тема: Извлечение переменных из массива, в локальную область видимости. • Форум: Объектно-ориентированное программирование

Ответов: 16
Просмотров: 1978
MouseZver пишет:
в документации все описанно, как работать с массивом и вынести переменные
extract($var_array, EXTR_PREFIX_SAME, "wddx");

не говнокодьте

Уважаемый вопрос не о том как юзать функцию extract(), я прекрасно умею читать документацию. Перечитайте вопрос! Для флуд-а есть соответствующий раздел.
re2enX Отправлено: 15 Сентября, 2017 - 11:36:01 • Тема: Извлечение переменных из массива, в локальную область видимости. • Форум: Объектно-ориентированное программирование

Ответов: 16
Просмотров: 1978
Доброго времени суток.
Есть массив:
PHP:
скопировать код в буфер обмена
  1.  
  2. $test = array(
  3.         'item_1' => 'Item 1 Data',
  4.         'item_2' => 'Item 2 Data',
  5.         'item_3' => 'Item 3 Data',
  6.         'item_4' => 'Item 4 Data'
  7. );
  8.  


Для того чтобы распаковать элементы массива, как переменные, в текущую область видимости, применяют функцию extract(), например:
PHP:
скопировать код в буфер обмена
  1.  
  2. function fn() {
  3.         extract($test);
  4.  
  5.         echo $item_3;
  6. }
  7.  

Имеет-ли право на жизнь, следующий код:
PHP:
скопировать код в буфер обмена
  1.  
  2. function fn() {
  3.         foreach ($test as $key => $value) {
  4.                 $$key = $value;
  5.  
  6.                 // http://php.net/manual/ru/language.variables.variable.php
  7.         }
  8.  
  9.         echo $item_2;
  10. }
  11.  

Допустим в массиве $test, ключи фиксированы (новые не добавляются, существующие не удаляются), меняется лишь значение ключей. В этом случае, нужно применять unset() в конце вызова функции? Пример:

PHP:
скопировать код в буфер обмена
  1.  
  2. function fn() {
  3.         foreach ($test as $key => $value) {
  4.                 $$key = $value;
  5.         }
  6.  
  7.         echo $item_2;
  8.  
  9.         foreach ($test as $key => $value) {
  10.                 unset($$key);
  11.         }
  12. }
  13.  
  14.  


Или можно обойтись и без unset()? Чем грозит такой подход? Спасибо.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB