在PHP中进行强制转换
尽管PHP是一种不需要显式声明类型的语言,但它存在与C语言风格的转换相似的类型强制转换。然而,PHP常常会出现一些不那么简单的类型转换情况。
将转换为标量类型
在C语言中,无法将整数转换为字符串,但在PHP中则可以很容易地做到。然而,出乎意料地,PHP有多个类型指定符。
-
- 整数へのキャスト:(int)、(integer)
文字列へのキャスト:(string)
ブール値へのキャスト:(bool)、(boolean)
浮動小数点数へのキャスト:(float)、(double)、(real)
因此,由于这些函数(intval、strval、boolval、floatval)存在相等的转换功能,所以在较长的表达式中,如果使用转换操作符不清楚需要转换到哪个类型,可能更容易阅读的是使用函数的方式。
将数据转换为数组
在PHP中,通过写作(array)可以实现对数组的类型转换。这个行为的意思是,
-
- NULL→空の配列
-
- その他のスカラー値→1個だけ入った配列
-
- 配列→そのまま
- オブジェクト→プロパティ値をキーにした連想配列
创建PHP中常见的“既可以接收单个值也可以接收数组作为参数”的函数时,可以将接收到的参数强制转换为一个数组,然后以后都可以将其作为数组来使用。不过,对于对象而言,如果存在继承关系或者存在private或protected属性,可能会生成一个带有空字符的奇怪键名,因此在实际应用中,只能将stdClass对象转换为关联数组左右。
将对象强制转换为另一种类型
太不可思议了,居然可以通过强制转换来生成对象,但是它们都会变成stdClass的对象。
-
- スカラー値→それをscalarプロパティに入れたオブジェクト
-
- 連想配列→配列のキーをプロパティ名に変換したオブジェクト
- オブジェクト→そのまま
如果数组中有数值键,则转换后的对象将无法访问。
将NULL向NULL进行转换。
在中文中将以下内容表达:(仅需要一种选项)
虽然有”unset”的角色,但无论接收到什么,都会返回NULL。在C语言中,偶尔需要使用(void),但在类型不严格、也没有宏的PHP中,很难想象会需要这种情况。