Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Извлечение переменных из массива, в локальную область видимости.
Допустим в массиве $test, ключи фиксированы (новые не добавляются, существующие не удаляются), меняется лишь значение ключей. В этом случае, нужно применять unset() в конце вызова функции? Пример:
Покинул форум
Сообщений всего: 58
Дата рег-ции: Июнь 2017 Откуда: php.ru
Помог: 1 раз(а)
в документации все описанно, как работать с массивом и вынести переменные
extract($var_array, EXTR_PREFIX_SAME, "wddx");
не говнокодьте
re2enX
Отправлено: 15 Сентября, 2017 - 13:26:25
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Сент. 2017
Помог: 0 раз(а)
MouseZver пишет:
в документации все описанно, как работать с массивом и вынести переменные
extract($var_array, EXTR_PREFIX_SAME, "wddx");
не говнокодьте
Уважаемый вопрос не о том как юзать функцию extract(), я прекрасно умею читать документацию. Перечитайте вопрос! Для флуд-а есть соответствующий раздел.
andrewkard
Отправлено: 15 Сентября, 2017 - 16:28:13
Участник
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
re2enX пишет:
Имеет-ли право на жизнь, следующий код:
нет, для этого есть родная функция extract
соотв. эти вопросы отпадают
re2enX пишет:
Или можно обойтись и без unset()? Чем грозит такой подход? Спасибо.
(Добавление)
Кроме того, Ваша функция function fn() вряд ли знает о переменной $test
re2enX
Отправлено: 15 Сентября, 2017 - 19:27:20
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Сент. 2017
Помог: 0 раз(а)
[quote=andrewkard][/quote]
Почему "Нет."? чем это чревато, можете объяснить? Я знаю что существует родная функция extract() <сарказм>Огромное вам спасибо, вы открыли мне глаза</сарказм>. И нет! Вопрос не отпадает, ведь получается, если у кода нет "печальных" последствий, то способ имеет право на жизнь.
Весь написанный мною код, приведен в качестве примера, общая идея ясна и прекрасно передает суть.
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
re2enX пишет:
общая идея ясна и прекрасно передает суть.
мне не ясна
потрудись пояснить в чем вопрос
пожалуйста
тебе вполне справедливо намекнули что области видимости не совпадают, ты видимо пишешь код в форуме а не в действительности
потести
то есть ты предполагаешь что-либо не проверив...имхо
---
по сабжу
нет смысла ансетить чтолибо если это не важно для последующего кода
php рожден чтобы умереть - это означает что память освобождается после отработки скриптов...кроме некоторых интересных случаев ...это не он
Строитель
Отправлено: 15 Сентября, 2017 - 22:57:14
Участник
Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 74 раз(а)
re2enX пишет:
ведь получается, если у кода нет "печальных" последствий
Печальные последствия обязательно появятся при отладке такого говнокода.
На сколько мне известно, переменные переменных - это такая же плохая практика, что и global в пользовательских функциях. Иначе говоря, использовать можно (есть в ЯП такая возможность) но не желательно.
LIME
Отправлено: 15 Сентября, 2017 - 23:17:06
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Строитель пишет:
На сколько мне известно, переменные переменных
я подумал вопрос в необходимости ансетить ненужные переменные
но видимо абшибся и вопрос впринципе о заменимости екстракта подобным циклом
---
вобщем и целом -
сам екстракт сомнительная ф-ция
наводит на вопрос - если не знаешь какие переменные у тебя есть может подумаешь об архитектуре приложения еще раз?
но это все общие слова
в итоге
получаем неконтролируемые переменные
которые могут совпадать именем с уже существующими = потенциальная дыра + сложность отладки как сказал коллега
+ есть подозрение в непонимании областей видимости...имхо тс пришел в пхп после js
в пхп нет внешнего скопа если специально его не задать в замыкании
Строитель пишет:
переменные переменных - это такая же плохая практика, что и global в пользовательских функциях.
такая же плохая но не такая же
глобальные переменные рискуют быть переписанными в любой момент другим кодом когда твой пакет этого не ждет
ну + конфликт имен конечно
+ невозможность повторного использования
переменная переменной это скорее минус динамического объявления переменных
в чемто минусы пересекаются но не совсем то же самое
минус этого еще в невозможности поддержки среды разработки так как тип определяется в рантайме а не в объявлении
Строитель пишет:
Печальные последствия обязательно появятся при отладке такого говнокода.
это да...но гораздо печальнее будет чтение такого... кода (Добавление)
короче нельзя не потому что нельзя а потому что плохо))
Строитель
Отправлено: 15 Сентября, 2017 - 23:40:04
Участник
Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 74 раз(а)
LIME пишет:
Строитель пишет:
На сколько мне известно, переменные переменных
я подумал вопрос в необходимости ансетить ненужные переменные
но видимо абшибся и вопрос впринципе о заменимости екстракта подобным циклом
---
вобщем и целом -
сам екстракт сомнительная ф-ция
наводит на вопрос - если не знаешь какие переменные у тебя есть может подумаешь об архитектуре приложения еще раз?
но это все общие слова
в итоге
получаем неконтролируемые переменные
которые могут совпадать именем с уже существующими = потенциальная дыра + сложность отладки как сказал коллега
+ есть подозрение в непонимании областей видимости...имхо тс пришел в пхп после js
в пхп нет внешнего скопа если специально его не задать в замыкании
Строитель пишет:
переменные переменных - это такая же плохая практика, что и global в пользовательских функциях.
такая же плохая но не такая же
глобальные переменные рискуют быть переписанными в любой момент другим кодом когда твой пакет этого не ждет
ну + конфликт имен конечно
+ невозможность повторного использования
переменная переменной это скорее минус динамического объявления переменных
в чемто минусы пересекаются но не совсем то же самое
минус этого еще в невозможности поддержки среды разработки так как тип определяется в рантайме а не в объявлении
Строитель пишет:
Печальные последствия обязательно появятся при отладке такого говнокода.
это да...но гораздо печальнее будет чтение такого... кода (Добавление)
короче нельзя не потому что нельзя а потому что плохо))
+++++
Твой ответ оказался наиболее полным )
PS: Привет
LIME
Отправлено: 15 Сентября, 2017 - 23:42:54
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Строитель как модер юзай спойлер))
привет))
как на новом месте? прижился?
(Добавление)
Строитель пишет:
Твой ответ оказался наиболее полным )
ну....какбэ...епрст...
не лаптем ентер нажимаем)) знаем немножко чутьчуть))
спрашивайте ежели запутаетесь
не лучше мелкого...он реально умный...а я просто говорю что знаю)
Строитель
Отправлено: 16 Сентября, 2017 - 10:19:09
Участник
Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 74 раз(а)
LIME пишет:
как на новом месте? прижился?
Пока всё ок, спс )
re2enX
Отправлено: 16 Сентября, 2017 - 19:21:21
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Сент. 2017
Помог: 0 раз(а)
Все пытаются объяснить мне как работает функция extract()...
LIME, Кто вас так обманул?
1. Кто сказал вам что функция extract(), "сомнительная функция"? Посмотрите исходный код symfony, laravel или flight.
2. Кто сказал вам, что переменные переменных, считается плохой практикой? Мне интересно, как вы будете писать например: интерпретатор или транслятор, насколько "правильным" и "чистым" будет ваш код без применения "переменные переменных"...
Цитата:
тс пришел в пхп после js
Ходячий шар, неверных предсказаний...
ВНИМАНИЕ! Ответ на вопрос (для тех, кому это было интересно):
Это код полностью идентичен вызову extract() с флагом EXTR_OVERWRITE, смотрим исходный код функции extract() на С. Нет необходимости использовать unset().
Наверное, правила данного форум, запрещают давать дельные ответы...
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
не путайте клиентский код с кодом инструментов
для пакетов это вполне приемлимо
для клиентского кода сомнительно
лучше задуматься о том что отвечают чем отвечать "сам дурак"
естественно можно и в цикле это делать
только зачем если есть уже сахар? (Добавление)
пакеты ты не станешь читать
а вот твой код скорее всего станут читать
работа прогера в большей степени это чтение (Добавление)
сахар - это термин (Добавление)
re2enX пишет:
ВНИМАНИЕ! Ответ на вопрос (для тех, кому это было интересно):
сомневаюсь что такие найдуться идо решение простое как табуретка
гораздо сложнее понять что в нем плохого чем додуматься до него))
удачи в прогрессе)
re2enX
Отправлено: 16 Сентября, 2017 - 19:37:32
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Сент. 2017
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
ого
сколько всего хорошего по ссыле %сарказм%
не...хорошие штуки только не понимаю причем они к вопросу ну и какбэ в курсе...читал...использую
ну раз пошла такая пьянка рекомендую погуглить SOLID... если еще не в курсе конечно
все по ссылке это реализации его
спасибо за ссылку пригодится читателям) %не сарказм%
только не надо из этих штук делать религию
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.