今天测试下面的代码时惊呆了:
$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/