php - 为什么不能在同一行中解码和反序列化?(像这个例子)
问题描述
为什么这是不可能的?
$b64_encoded = base64_encode(serialize(array('test')));
if( $b64_decoded = base64_decode($b64_encoded) && $unserialized = unserialize($b64_decoded) )
{
var_dump($unserialized);
}
解决方案
你可以。
发生的事情是 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 现在可以理解您指定的语句的优先级。
推荐阅读
- react-native - 如何在 React Native 中创建合适的文本编辑器?
- amazon-web-services - 添加新账户时必须替换 Aws_iam_account_alias
- pandas - 默认 SimpleTransformers 设置失败并出现 ValueError str
- python - Tensorflow 错误 - 找不到属性“__internal__”
- python - MIDI 文件头块的相等性测试
- python - 函数执行后函数返回无
- r - R:R中的条件求和
- python - 下次运行程序时如何可靠地获取当前的 iframe?
- git - Git 并行构建合并冲突自动解决
- r - R笔记本输出中的怪异