gpt4 book ai didi

php - 为什么 ${0x0} 是正确的?

转载 作者:IT王子 更新时间:2023-10-29 00:59:13 26 4
gpt4 key购买 nike

以下代码运行良好:

${0x0} = 'test';
echo ${0x0}; // prints "test"

但我想不通为什么。 0x0(或0,非十六进制的人称它)是一个随机容器,它可以是任何数字,但 php 变量不能以数字开头。此处使用的 { } 有什么特别之处,它们的局限性是什么?

最佳答案

首先,0x0 只是一个十六进制表示的常规 0,当与变量一起使用时,它会转换为字符串 '0'变量语法:

var_dump(0x0===0); // prints "bool(true)"

${0x0} = 'test';
echo ${0x0}; // prints "test"
echo ${'0'}; // prints "test" as well
var_dump(get_defined_vars()); // contains ["0"] => string(4) "test"

你是对的,你说它不是 valid variable name :

Variable names follow the same rules as other labels in PHP. A validvariable name starts with a letter or underscore, followed by anynumber of letters, numbers, or underscores. As a regular expression,it would be expressed thus: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

这就是 $0foo = 'Test'; 触发解析错误的原因。

使用 variable variables syntax 进行一些快速测试揭示了,事实上,PHP 似乎并不真正关心变量名,因为它们是字符串:

${'123 abc xyz    '} = 'Test';
echo ${'123 abc xyz '}; // Test
echo ${'123 abc xyz '}; // PHP Notice: Undefined variable: 123 abc xyz in ...
var_dump(get_defined_vars()); // ["123 abc xyz "] => string(4) "Test"

我的猜测是上述命名限制是由源代码解析器而不是语言核心施加的。在分析 PHP 代码时,它需要这样的规则来区分变量。在内部,支持 PHP handles variables 的 Zend 引擎作为 HashMap :

PHP variables, in general, consist out of two things: The label, whichmight, for instance, be an entry in a symbol table, and the actualvariable container.

只要它收到一个有效的标签字符串,它就很高兴。

关于php - 为什么 ${0x0} 是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com