Lev*_*son 10
由于PHP 7.0有支持bool,int,float和string.在标量类型RFC中添加了支持.有两种模式:弱和严格.我建议阅读RFC以充分理解差异,但基本上类型转换只发生在弱模式下.
鉴于此代码:
function mul2(int $x) {
return $x * 2;
}
mul2("1");
Run Code Online (Sandbox Code Playgroud)
在弱模式下(这是默认模式),这将转换"1"为1.
要启用严格类型,请添加declare(strict_types=1);到文件的顶部.在严格模式下,将发出错误:
致命错误:传递给mul2()的参数1必须是整数类型,给定字符串
PHP的松散类型,你的"原始"类型根据它们使用的上下文自动进行类型化.类型提示不会真正改变它,因为字符串可以用作int,反之亦然.类型提示只对数组和对象等复杂类型有帮助,这些类型不能干净地作为整数,字符串或其他基元进行处理.
换句话说,由于PHP没有特定类型的概念,因此您无法在某处获取int,因为它不知道int究竟是什么.另一方面,对象属于某种类型,因为MyClass不能与MyOtherClass互换.
仅供参考,这是当您尝试在这些类型之间进行转换时所发生的情况(不是详尽的列表):
转换为Object(ref)
"如果将对象转换为对象,则不会对其进行修改.如果将任何其他类型的值转换为对象,则会创建stdClass内置类的新实例.如果该值如果为NULL,则新实例将为空.数组转换为具有按键和相应值命名的属性的对象.对于任何其他值,名为scalar的成员变量将包含该值.
对象为int/float(ref)
未定义的行为
在PHP5中对象为boolean(ref)
,始终为TRUE
Object to string(ref)如果适用,将调用
对象的__toString()魔术方法.
对象到数组(ref)
"如果一个对象被转换为一个数组,结果是一个数组,其元素是对象的属性.键是成员变量名,有一些值得注意的例外:整数属性是不可访问的;私有变量有类名称前置于变量名称;受保护的变量在变量名称前面加上'*'.这些前置值在任一侧都有空字节.这可能会导致一些意外行为."
数组到int/float(ref)
未定义的行为
Array to boolean(ref)
如果数组为空(即没有元素),则计算结果为FALSE - 否则为TRUE.
数组到字符串(ref)
字符串"Array"; 使用print_r()或var_dump()打印数组的内容
对象的数组(ref)
"数组转换为具有按键命名的属性的对象,以及相应的值."
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |