Доступ к переменным в вышестоящей области видимости (не глобальной)

Статус
В этой теме нельзя размещать новые ответы.
Для этой задачи обычно используют placeholder'ы.
PHP:
$uid=1;
$user->del('uid<>? AND ulevel == ?', $uid, $ulevel);
Примерно такой вариант сейчас идет основным, но хочется лучшего.
Вы ведь сами прекрасно понимаете, что невозможно получить доступ к переменным.
Нуу.... искусства ради можно передавать запрос с двойными кавычками, т.о. мы получим данные, а потом через дебаг_бектрасе получать ссылку на строчку с исходниками, а потом парсить исходники и восстанавливать шаблон. Но это слишком накладно по производительности :)
т.е. теоретически задача решаема.
Ну и потом, вопрос я задавал в надежде, что я что-то пропустил.
 
Если бы global $var; брал переменную не с глобальной области, а с предыдущей, то задача бы решалась просто через eval(), но к сожалению не прокатывает.
 
На мой взгляд стоит быть внимательным, и увидеть в моем коде mysql_real_escape :)
Никто Вам не запрещает добавить нужные обработки внутри функции.
Важно, что Вы имеете a) формальные параметры функции, которые при вызове заменяются фактическими. b) Внутренние локальные переменные, идентификаторы которых могут совпадать с идентификаторами фактических переменных.
p.s. Если внутри функции необходимо менять значения фактических параметров функции, то передавайте их по ссылке.
 
ппц. Ну почему всегда люди стремятся решать придуманную ими же задачу, а не ту которую нужно решать?
Зачем додумывать? Зачем считать окружающих неопытными ламерами, не знающими элементарных конструкций? Ну вот зачем скажите мне?
Неужели промолчать когда понял что не прав сложнее чем писать чушь?


zss, есть три варианта:
  1. Вы нарушаете правило форума номер 2.0 и вместо ответа на вопрос "как сделать..." отвечаете "так ты не делай, пусть кто-то другой делает" (вариант эскейпинга ДО вызова функции означает что прикладной программист должен писать сложные структуры по десять раз)
  2. Вы нарушаете правило форума номер 2.0 и во второй раз не разобравшись говорите о возможности сделать то, что невозможно
  3. Правило номер 2.0 нарушаю я, и это действительно можно сделать :)
Если вы приведете вариант эскейпинга ВНУТРИ функции в рамках приведенного вами синтаксиса, то я готов заплатить Вам 50 баксов.
В противном случае заткнитесь и не звездите.
 
Я имел ввиду использование примерно такого кода:
Код:
function test(&$uidPar,$need_ulevelPar)
{
   $uid=1;
   $ulevel=10000;
   $user->del("uid<>'".mysql_real_escape($uidPar)."' AND ulevel == '" .mysql_real_escape($need_ulevelPar)."'" );
   $uidPar=$uid;
}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху