PHP 是松散类型的,您的“原始”类型会根据使用它们的上下文自动成为type-juggled。类型提示不会真正改变这一点,因为字符串 可以 用作 int,反之亦然。类型提示只会对复杂类型(如数组和对象)真正有帮助,因为它们不能清晰地转换为整数、字符串或其他原语。
换一种说法,由于 PHP 没有特定类型的概念,你不能在某处要求 int,因为它不知道 int 到底是什么是。另一方面,对象 是 的特定类型,因为 MyClass 不能与 MyOtherClass 互换。
仅供参考,当您尝试在此类类型之间进行转换时会发生以下情况(并非详尽列表):
转换为对象 (ref)
“如果将对象转换为对象,则不会对其进行修改。如果将任何其他类型的值转换为对象,则会创建 stdClass 内置类的新实例。如果value 为 NULL,新实例将为空。数组转换为具有由键命名的属性和相应值的对象。对于任何其他值,名为 scalar 的成员变量将包含该值。"
对象为 int/float (ref)
未定义的行为
布尔对象 (ref)
在 PHP5 中,总是 TRUE
对象到字符串 (ref)
如果适用,将调用对象的__toString() magic method。
对象到数组 (ref)
“如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名称,但有一些值得注意的例外:整数属性不可访问;私有变量的类名前面加上“
数组到 int/float (ref)
未定义的行为
数组到布尔值 (ref)
如果数组为空(即没有元素),则计算结果为 FALSE,否则为 TRUE。
数组到字符串 (ref)
字符串“数组”;使用print_r() 或var_dump() 打印数组的内容
数组到对象 (ref)
“数组转换为具有由键命名的属性和相应值的对象。”