假设你有个?string类型的值,而且准备把这个值传递给一个参数类型为string的函数。那么你怎么把一个类型(?string)转化为另外一个类型(string)呢?或者假设你有个object类型的值,它可能实现或没有实现polarizable接口。同时,如果它实现了这个接口,你还希望调用这个object的方法polarize()。那么类型检查器如何才能知道polarize()调用是合法的?
在一个良好组织的代码中,实现一个值是一个类型同时又是另外一个类型的任务情况非常常见。这些看起来非常琐碎的事情是你必须拿来安抚类型检查器的关键所在。这是hack能够在开发前期就捕获问题的关键。这也是hack能够避免像调用一个不存在的方法、在不恰当的地方找到了一个空值,以及其他一些在php代码库开发调试中常见的恼人错误这些情况的原因。
你有三种类型检查器使用的方式对这些类型进行提炼转化,它们是:是否为空检查、类似is_integer()的内置类型查询函数,以及instanceof 。当这些语句在流程控制语句(比如循环语句、条件语句)中被使用时,类型推理引擎将会明确知晓:在不同的流程控制路径下,类型值也不同。