如何使PHP对象返回非字符串?

如何使PHP对象返回非字符串?,php,Php,在阅读Spleum的文档时,我在示例中看到了这行代码: echo new Month(Month::June) . PHP_EOL; 该代码的输出是“6”。不过,我不知道这个值是字符串还是数字 这让我想知道,PHP对象是否可以返回字符串以外类型的值?我知道我可以通过定义\uu toString()函数使我的类返回字符串。但是,如果我尝试返回另一种类型的值,则会引发异常 有没有办法使对象返回非字符串?我对纯PHP解决方案感兴趣,而不是像SplEnum这样需要编译扩展的解决方案。(如果SplEnu

在阅读Spleum的文档时,我在示例中看到了这行代码:

echo new Month(Month::June) . PHP_EOL;
该代码的输出是“6”。不过,我不知道这个值是字符串还是数字

这让我想知道,PHP对象是否可以返回字符串以外类型的值?我知道我可以通过定义
\uu toString()
函数使我的类返回字符串。但是,如果我尝试返回另一种类型的值,则会引发异常


有没有办法使对象返回非字符串?我对纯PHP解决方案感兴趣,而不是像SplEnum这样需要编译扩展的解决方案。(如果SplEnum返回的是非字符串,而编译的扩展名是实现这一点的唯一方法,我也希望得到确认。)

没有办法完成您想要做的事情。返回字符串后,您可以将其强制转换为任何您喜欢的字符串,但是_toString()必须返回实际字符串(并且没有_toInt()),根据:

此方法必须返回字符串,否则将发出致命的E_可恢复错误级别错误。“


更具哲理的一点是,将对象转换为int可能不是一种很好的架构模式。如果您正在考虑这样做,您可能需要重新考虑您的设计。

使用
\u-toString
的问题在于,它没有明确说明格式是什么

打印月份对象的方法有很多:
“Jan”
“janu”
“01”
“1”
“janvier”
。\u toString使用的函数绝对错误

在调试时使用
\uuuu toString
有一些优点,但即使这样也有问题

我建议您为希望支持的每种输出格式创建一个函数,例如:

Month->getMonth(); // returns int(1)
Month->getFormattedMonth("long"); // returns "January"

如果你需要一个整数,请使用
intval()
,如果是string,只需将其转换为
(string)$val
,例如,只需将其用作返回它的“输出函数”。这个问题的答案非常简短:不。较长的版本应该是:
\uu toString()
最初只设计用于调试。引擎明确禁止它返回任何其他类型(因此扩展也很难做到这一点)。多年来,已经有许多建议添加类似的功能,但尚未就其实际工作方式达成共识。也就是说,操作员过载可能是您真正想要的-但我们在userland中也没有:-(SplTypes是实验性的,它们可能不会包含在PHP中,因为它们无法解决自动装箱/取消装箱问题。如果没有方法/函数调用来显式地将对象转换为非字符串标量值,则无法做到这一点。由于
echo
发出字符串,显然PHP试图将对象转换为字符串。但是不清楚您是要求使用
\u-toInt()
魔术方法还是让
\u-toString()
返回非字符串:-?