我的理解是,以下是允许在PHP因为它是一个弱类型语言。

$var = 'Hello';
$var = 5;

我刚安装了Python 2.6的Windows版本和我期待的是不要让我改变类型就像这样,但是Python的当量的上述代码的工作就像在PHP亚克西!

>>> var = "Hello"
>>> type(var)
<type 'str'>
>>> var = 5
>>> type(var)
<type 'int'>

是我的硬伤弱/强类型的理解?

有帮助吗?

解决方案

您的示例演示动态打字,不弱类型。动态类型通常是指数据的对象可以存储的类型是可变的;任何目标可持有绑定到任何类型的对象。对比,与,比如说,C#,这是静态类型的[*]。

int i = 5; // Okay.
i = "5";   // Illegal! i can only hold integers.

强类型意味着一旦分配了特定种类的值,对象服从关于它们如何与各种类型的其他对象交互严格的规则。弱类型意味着这样的规则更为宽松。这并不意味着强类型语言以任何方式一定比;它只是一个语言的设计选择。

的Python被视为强类型,因为对象有什么,他们键入他们是不同的概念。对象之间的不兼容的操作引起错误:

>>> 1 + 1          # Add two integers.
2
>>> "1" + "1"      # Concatenate two strings.
'11'
>>> 1 + int("1")   # Add two integers.
2
>>> "1" + str(1)   # Concatenate two strings.
'11'
>>> 1 + "1"        # Undefined! Adding integers and strings is meaningless.
Traceback (most recent call last):
  File "", line 5, in ?
TypeError: unsupported operand type(s) for +: 'int' and 'str'

但在PHP中,规则更为宽松关于什么是可以接受的。因此,它被认为更弱类型比一些其他语言。

$x = 1 + "1"; // x is 2

[*]技术上,作为C#4,C#是静态类型但是具有每结合的基础上选择,在动态类型,由于dynamic关键字。很多语言的这些天中添加动态功能和界限模糊,所以它变得越来越难地说,“语言X动态”和“语言Y是静态的。”它更滑动标尺或频谱比它是一个二进制属性。的

其他提示

一分加入第一个答案: 这是一个稍微复杂一些,因为在python +运算符重载这意味着它既能增加(数学)并连接(胶水两个字符串)。 在php示例

$i = 1 + "1" // $i == 2

加添加(数学),因为。 (点)被用于串联,所以在PHP

$i = 1 . "1" // $i == "11"

我试图做出明确的是,每一个弱类型本/动态语言的交易在它自己的方式。

有弱类型或强类型的没有真正的定义。它的所有关于隐式类型转换,并没有任何的静态/动态类型。

一个像Java静态类型语言的可以被弱类型(未即它),以及类似的PHP动态类型语言的可以是强类型(未它是)。

一个弱类型语言更自由在什么样的数据类型可以在某些操作进行混合。

是。这不强/弱类型,即静态/动态类型。弱类型允许的东西,如5 + '5'等于10。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top