• Авторизация


lesson #1 28-02-2007 22:27 к комментариям - к полной версии - понравилось!


Дабы дневник стал по-настоящему записками программиста, решил время от времени постить сюда финты ушами в кодинге. Поскольку я PHP программист, то и записи будут касаться PHP и около-web-овое направление.
Люди, добавившие меня в френдлист, я надеюсь, вы знали на что шли, когда нажимали кнопку "Стать ПЧ" :-)

Итак, пое][али!

Начнем с простого :)
Быстрый и легкий способ поменять местами две и более переменных (местами бывает нужно, хотя сам забыл когда их последний раз менял :-)).
PHP:

$a
='value1'$b='value2';
list(
$a,$b) = array($b$a);
font>

как следствие будет работать и следующий алгоритм.
PHP:

list($a,$b$c$d) = array($b,  $c$d$a);
font>

Присваивание в левую часть будет в порядке записи данных в правой части.

Забавная ситуация получается если присваивать по ссылке
PHP:

$a
="value1"$b="value2"$c "value3";
list(
$a,$b,$c) = array(&$c, &$a, &$b);
font>

Получается, что $a сошлется на $c, которое в свою очередь сошлется на $b и мы будем иметь две ссылки на $b. Естественно, изменив $b, мы получим синхронное изменение в обеих переменных. Кому это может пригодиться, я не знаю :-) В общем случае получается довольно интересный механизм множественного оператора присвоения.

На этом все, до следующих встреч в эфире :-)

PS: Забавно то, что описанного выше способа работы с переменными в PHP почти никто из моих знакомых программеров не знал, пока я им не показал :-)) Т.е. они знали, что есть оператор list(), но вот до такого изврата не додумались :-)
вверх^ к полной версии понравилось! в evernote
Комментарии (8):
"Получается, что $a сошлется на $c, которое в свою очередь сошлется на $b и мы будем иметь две ссылки на $b. Естественно, изменив $b, мы получим синхронное изменение в обеих переменных." - и кто-то получит воспаление мозга при разборе кода ;)
Кстати была интересная задачка , поменять местами два числовых значения переменной не используя третей переменной , задача классическая ... слабо вспомнить ? :)
Гриня 01-03-2007-09:00 удалить

вот чего не помню, того не помню.

не довелось с ней столкнуться, именно в такой интерпретации... :)

ну и чем мой вариант не есть ее решение? :))))

В колонках: [Buffer: 0%] Live feed from Nashe Radio (Moscow 101.7 FM) (NASHE Radio 101.7 FM) - Winamp [Stopped]

TLС v.0.7.31c
Dail 01-03-2007-14:42 удалить
Блин! Это же гениально! Flow musicArctic Monkeys - Still Take You Home LI 5.8.17
Гриня 01-03-2007-14:52 удалить
Dail, это еще детский лепет :-) есть более крутые штуки :) но о них далее :) Madskiy, отнюдь. Просто программисты :) Апрельский_Ёжик, а им не жалко мой мозк, когда я ковыряю их код? :))
Гриня, тем что интерпретатор будет делать так: 1) Создаёт массив (неименованный) и КОПИРУЕТ туда две переменные (память на массив) 2) Перемещает копии переменных из массива посредством вызова функции в переменные. (использование не элементарной функции) Т.е. если по сути , то это избыточный вариант , но на практике бесспорно удобный , т.к. прост и нагляден (в отличии от ссылок ;) которые на переменные). Да и в интерпретаторе есть такая примета - чем меньше строк тем лучше , потому что интерпретация множества элементарных операций все же дольше чем интерпретация пары вшитых функций... А вообще все это бред что я сказал , ибо в РНР так запариваться на памяти есть великое зло и психоз :) ЗЫ Надо будет вспомнить тот приёмчик про две переменные поменять местами без третей. 2)
Эхъ... Вообще чужой код есть кладезь знаний , а знания есть зло , убивающее мир , ибо оружие сие беспощадное.


Комментарии (8): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник lesson #1 | Гриня - /* Записки программиста */ | Лента друзей Гриня / Полная версия Добавить в друзья Страницы: раньше»