Bogus PHP(int)类型转换行为?

时间:2016-09-11 00:11:46

标签: php casting

由于Magento在PHP中使用(int)类型转换,我生命中浪费了3个小时。公平地说,类型转换对他们来说不仅仅是公平的......似乎是翻译的意外行为破坏了我的下午。

$sString = '123 Sesame Street';
$iNumber = (int)$sString;
var_dump($iNumber); // int(123)
这是故意的吗?显然它可以预先通过is_numeric检查,但是真的吗?

1 个答案:

答案 0 :(得分:3)

您期望结果是什么? (int)完全按预期工作。

如果您想阅读它所说的PHP manual documentation

  

该值由字符串的初始部分给出。 如果是字符串   从有效的数字数据开始,这将是使用的值。   否则,该值将为0(零)。有效的数字数据是   可选符号,后跟一个或多个数字(可选地包含一个   小数点),后跟可选的指数。指数是一个   'e'或'E'后跟一个或多个数字。

Emphesis mine

因为这是PHP类型杂耍的基本实现,我怀疑问题不在于Magento的类型处理,而在于你自己对类型处理能力的解释。您可以采用更好的Magento方法来获得更准确的响应。

我建议使用以下伪代码来解决您的问题:

if((string)$sString != (int)$sString) {
   //This string is not a number or not only a number. 
}