php - PHP到底是如何实现 'dynamic'变量的呢?

标签 php variables interpreter

今天测试下面的代码时惊呆了:

$star = "Aquarius";
$star = 11;

在调试时,我观察到 $star 只是从 string 类型更改为 integer 类型。我对这个功能感到惊讶。例如,在 C++ 中,这是不可能的,但在 C# 中,我考虑了 var 变量,但它不一样。

例如你不能这样做:

var dynamic = "Hello";
dynamic = 3;

我开始想知道当我基本上说 $star = 11 时到底发生了什么。我的猜测是 $star 只是重新初始化,因为它被直接分配给(但这看起来很奇怪,因为解释器已经知道变量 $star 已经在前面声明了)。任何人都可以提供一些明确的或官方来源支持的解释吗?

谢谢。

最佳答案

在 C/C++ 中,类型是在编译时定义的,因为可以基于它进行各种优化。

在 C# 中,编译器根据上下文推断类型,在编译器的大脑中,它用 var 关键字代替类型。这就是为什么在编译器做出初始推断后不能更改类型的原因。

在像 PHP 这样的脚本语言中,变量是 HashMap (关联数组,符号表)中的一个条目。这定义了 namespace (和范围)。实际值部分是一个通用对象类型,它存储值和类型。

关于php - PHP到底是如何实现 'dynamic'变量的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12548258/

相关文章:

php - 将 if(!empty) 与不在数组中的多个变量一起使用

Java 访问变量

python - 在 linux 脚本中是什么意思? #!/usr/bin/python -tt

objective-c - 是否有适用于 Mac 的 Objective-C 解释器?

performance - 解释语言: The higher-level the faster?

java - PHP 站点和 Java 小程序之间的桥梁

php - 我怎样才能在关键字后切断文本?

php - 选择的选项总是落入第一个值,莫名其妙

python - 如何在 Python 中找到继承变量的来源?

android - 使用 putExtra() 和 getExtra() 将从另一个 Activity 发送的空变量的值设置为 0 以外的值