deobfuscation — расширенное форматирование php нужно помочь понять макет

Вот функция:

function simplePresent($e) {

$w = ($f = preg_match)('/ey|se|d |[sI]$|We/', $a = $e[0]);

be == ($b = $e[1])
?
$b = $w ? $a == I ? am : are : is
:
$w ?: $b = $b == have ? has : $b .= $f('/[h-z]$/', $b) ? es : s;

return "$a $b $e[2]";
}

это решение для codefights. он обрабатывает форматирование под определенными параметрами. Я пытаюсь понять назначение функции для переменных $f а также $w, Также использование переменных без кавычек. наконец, вложенные знаки вопроса и двоеточия. Как это работает?

Спасибо

0

Решение

Функция preg_match() присваивается переменной $f и повторно использовать позже в коде. $w это просто результат preg_match(), Например:

<?php
$w = ($f = 'sprintf')("foo");
// same as this:
$f = 'sprintf';
$w = $f("foo");
// which is the same as this:
$w = sprintf('foo');

Не заключенные в кавычки значения будут сначала интерпретироваться как константы, а неопределенные константы будут интерпретироваться как строки. Вот как выглядит правильное определение константы:

<?php
define("foo", "bar");
echo foo;
echo bar;
// PHP Notice:  Use of undefined constant bar - assumed 'bar'

// same as this:
echo "bar";
echo "bar";

Знаки вопроса и двоеточия являются частью троичное заявление. Это полезное сокращение, но PHP рекомендует не складывать их вместе, как это делается там (результат «неочевиден».) Простой выглядит так:

<?php
echo ($foo == "foo" ? "equal" : "inequal");
$a = $b ? $c : $d;

// this is the same as:
if ($foo == "foo") {
echo "equal";
} else {
echo "inequal";
}
if ($b) {
$a = $c;
} else {
$a = $d;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]