7

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

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

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

例如你不能这样做:

var dynamic = "Hello";
dynamic = 3;

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

谢谢。

4

3 回答 3

7

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

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

在 PHP 等脚本语言中,变量是哈希映射(关联数组,符号表)中的一个条目。这定义了命名空间(和范围)。实际值部分是存储值和类型的通用对象类型。

于 2012-09-22T22:49:07.957 回答
0

PHP 是一种动态语言,在精神上类似于 Perl、Ruby、Python 或许多其他语言。另一方面,C++ 是编译和静态类型的,要求每个变量在编译时定义一个类型。

查看 PHP 文档以深入了解 PHP 的动态类型实现: http: //php.net/manual/en/language.types.type-juggling.php

于 2012-09-22T22:48:31.940 回答
0

PHP 是一种松散类型的语言。PHP 根据值将变量转换为正确的数据类型。

看看这个 - http://php.net/manual/en/language.types.type-juggling.php

于 2012-09-22T22:52:51.287 回答