Тема: Task #2
Показать сообщение отдельно

  #86  
Старый 21.01.2019, 20:22
dooble
Участник форума
Регистрация: 30.12.2016
Сообщений: 218
С нами: 4931606

Репутация: 138
По умолчанию

Та дам!

Лайт прислал решение на 12 символов.

Цитата:
Сообщение от l1ght  

а с:
$a=~"phpinfo";echo ~$a; phpinfo
$a="phpinfo";~~$a(); true
$a=~"phpinfo";~$a(); false
понял почему ?
Цитата:
Сообщение от l1ght  

тип данных не меняется,синтаксис вроде позволяет,я это так и не вкурил
Цитата:
Сообщение от l1ght  

все понял,
(~%8F%97%8F%96%91%99%90)() - 12 символов
Первоначально не поверил ему, поскольку этот вариант я проверял, минимум дважды, должен работать, но не работает.

Раскомментировал строку //$p='(~'.~'phpinfo'.')()';

работает.

.SpoilerTarget" type="button">Spoiler

Эту магию оставил на потом разбираться, сейчас больше интересует магия скобок.

Давайте добивать вместе.

Я когда экспериментировал, исходил из того, что запись (здесь чего то) означает, что внутри скобок находится строка, сейчас не помню где, поищю, но скобки - это еще один способ записи строки, например конструкция (int)$var использует его.

В результате $a=~'phpinfo'; print ~$a; получается не строка, возможно константа.

А скобки принудительно заставляют воспринимать, как строку $a=~'phpinfo';(~$a)();

Есть еще вариант объяснения, что скобки это просто последовательность операций и в пользу этого говорят проверки

Код:
eval('print (3-2)()'.';'); - Function name must be a string
eval('print ("2"+"2")()'.';'); - Function name must be a string
eval('print (2*2)()'.';');- Function name must be a string
По крайней мере, это точно не преобразование в строку.

Кстати эта конструкция работает только на семерке, а в пятой ветке не работает.

==

PS

Лайт - красавчик.

#этапять

но поскольку отказался оформить пост, то #этаужечетыре и нет возможности закидать его репой (((.

==

PS2

Вот чем хорошо, когда команда ресерчит, вариантов набирается много и разных, и задание вроде бы простое, а превращается в нормальное, полноценное, интересное.
 
Ответить с цитированием