Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Sumo 03.01.2014 13:28 / 03.01.2014 13:34
Если необходимо обратиться к контексту вызывающей функции, то используем переменную caller текущего контекста. Т.е. мы можем «перенести» часть нашего контекста в контекст вызывающей функции, присвоив там какой-то переменной значение из нашего контекста. Таким образом формируется замыкание.Если в вашем примере модифицировать методов одним из следующих способов, выражение всегда получается ложнымВ вашем коде никаких проблем с контекстами нет, а есть две очевидные логические ошибки.
$aConditions($k % 2 && $aConditions)В данном случае вы на первой итерации присваиваете $aConditions значение tue или false. И на каждой следующей итерации используете это значение, а не то выражение, которое написано в вызывающей функции. Если на первой итерации aConditions == false, то на всех следующих ваш код бeдет выдавать false, если true, то все завсит от индекса первого элемента хеша, но на второй итерации опять получим false и дальше все сводится к первому случаю.
@selectOdd[aHash;aKeyVar;aValueVar;aConditions][locals] $extra($k % 2)Здесь переменная k не определена и в extra мы получим 0, а значит и в выражении ($extra && $aConditions) до вычисления aConditions даже не дойдет и выражение всегда будет ложным.