// (array) var_dump((array) 1); var_dump((array) 2.2); var_dump((array) "a"); var_dump((array) true); class Arr { public $a = 1; private $b = 2.2; protected $c = "f"; } class ChildArr extends Arr { public $a = 2; private $d = "g"; private $e = 1; } var_dump((array) new Arr()); var_dump((array) new ChildArr()); var_dump((array) null);
(object)如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为 NULL,则新的实例为空。array 转换成 object 将使键名成为属性名并具有相对应的值
注意:使用 PHP 7.2.0 之前的版本,数字键只能通过迭代访问
// (object) var_dump((object) 1); var_dump((object) 1.1); var_dump((object) "string"); var_dump((object) true); var_dump((object) NULL); var_dump((object) [1, 2, 3]); var_dump((object) ["a" => 1, "b" => 2, "c" => 3]);
(unset)使用 (unset) $var 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已
// (unset) var_dump((unset) 1); var_dump((unset) 1.1); var_dump((unset) "string"); var_dump((unset) true); var_dump((unset) null); var_dump((unset) [1, 2, 3]); var_dump((unset) new \stdClass());
(binary)将所有类型转换为二进制字符串。二进制字符串是区别于传统常用的普通php的Unicode字符串。二进制字符串是字节字符串,没有字符集。具体的区别就类似于数据库中的binary和char类型及blob和text类型
在日常的开发中基本用不到,了解即可
// (binary) var_dump((binary) 1); var_dump((binary) 1.1); var_dump((binary) "string"); var_dump((binary) true); var_dump((binary) null); var_dump((binary) [1, 2, 3]); var_dump((binary) new S());
以上就是我们的强制类型转换的所有类型,其中有一些类型的转换中提到了资源类型(Resource),但是并没有资源类型的强制转换。因为资源类型大多是一些句柄操作,如数据库链接、文件读写等,将其它类型强制转换为资源类型没有意义。
本文内容会经常出现在面试题中,而且在实际开发中的很多逻辑判断出现的BUG也常常是由于PHP的自动类型转换所导致的,所以这篇文章好好收藏多拿出来看看绝对会让你有意想不到的收获哦!!
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/201910/source/php%E4%B8%AD%E7%9A%84%E5%BC%BA%E5%88%B6%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2.php
参考文档:
https://www.php.net/manual/zh/language.types.type-juggling.php#language.types.typecasting
总结到此这篇关于PHP中强制类型转换的文章就介绍到这了,更多相关PHP强制类型转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章: