gpt4 book ai didi

php - PHP 如何知道它使用(或使用)什么类型的变量?

转载 作者:可可西里 更新时间:2023-11-01 12:17:04 26 4
gpt4 key购买 nike

我没有用很多语言做过很多编程,但我知道在 C(++) 中,你必须声明一个变量类型 (int,char,等)。

在 PHP 中,您当然不必这样做。您可以从 $str = "something"; 开始,然后是 $str = array("something"=> "smells");,她很高兴。

PHP 是如何编译的?它怎么知道变量类型是什么?它甚至在乎吗?

这个问题与我正在做的任何事情都无关。我只是好奇。

编辑。

我需要稍微澄清一下这个问题。

在 C 中,如果我说:

int y;

它为 y 保留了 x 个字节。如果 y 溢出,那就是坏消息。

PHP 没有这种性质(至少我认为没有)。

$i = "a number";
$i = 8;
$i = 1000000000000000000;

对于语言来说都是一样的。它怎么知道要保留多少?或者我是在比较苹果和橙子?如果我做错了,你有什么好的主题可以让我阅读以更好地理解吗?

最佳答案

由于您有 C 语言经验,请考虑如下所示的 PHP 变量:

typedef struct {
int varType;
void* data;
} variable_t;

当你创建一个新变量时,它会创建一个variable_t,给它一个类型标签(比如 1 代表 int,2 代表字符串),然后将它存储在某个列表中(按范围) , 按名称引用)。实际内容将存储在*data 中。当再次访问该变量时,可以根据 int varType 确定类型,并对 void* data 采取适当的操作,例如将其用作 int 或 string。

假设 PHP 片段:

 $data = 12;
$data2 = $data + 1;
$data = "Hello";

生成如下指令(伪 Cish):

Line 1:
variable_t* var = new_variable(TYPE_INT, data);
store_variable("data", var);

Line 2:
variable_t* var = get_variable("data2");
if (var->varType == TYPE_INT)
int value = 1 + *(int*)var->data);
else
error("Can't add non int");
var = new_variable(TYPE_INT, value);
store_variable("data2", var);

Line 3:
variable_t* var = get_variable("data");
if (var)
destroy_variable(var);
// Do like line 1, but for TYPE_STRING

这种类型的增强数据适用于字节码、编译或直接解释语言。

关于不同的虚拟机实现(本地分配、堆分配、注册 VM 等)有更多详细信息。如果你真的想了解虚拟机是如何工作的,最好的引用是 Lua。非常干净的语言,非常干净的字节码,非常干净的虚拟机。 PHP 可能是您应该关注的最后一个实现。

关于php - PHP 如何知道它使用(或使用)什么类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4039542/

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