Почему невозможно декодировать и десериализовать в одной строке? (как этот пример) - PullRequest
0 голосов
/ 28 октября 2019

Почему это невозможно?

$b64_encoded = base64_encode(serialize(array('test')));

if( $b64_decoded = base64_decode($b64_encoded) && $unserialized = unserialize($b64_decoded) )
{
    var_dump($unserialized);
}

1 Ответ

2 голосов
/ 28 октября 2019

Вы можете.

В результате PHP видит $b64_decoded как неопределенную и неустановленную переменную, потому что вы связали ее в своем операторе if без правильного разделения.

Смотрите это:

if( $b64_decoded = base64_decode($b64_encoded) && $unserialized = unserialize($b64_decoded) )

PHP считает, что && имеет более высокий приоритет над =. Ваш код эффективен:

$b64_decoded = (base64_decode($b64_encoded) && $unserialized) = unserialize($b64_decoded)

Что, кажется, не имеет никакого логического смысла.

Итак, мы должны сообщить PHP приоритет операций и какие элементы сгруппированы вместе. Мы можем сделать это, поместив наш оператор в ( )

Например:

if( ($b64_decoded = base64_decode($b64_encoded)) && $unserialized = unserialize($b64_decoded) )
    ^                                          ^

PHP теперь понимает приоритет оператора, как вы указали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...