在阅读 SplEnum 的文档时,我在示例中看到了以下代码行:
echo new Month(Month::June) . PHP_EOL;
该代码的输出为"6"。 不过,我不知道该值是字符串还是数字。
这让我想知道,PHP 对象可以返回字符串以外的类型的值吗? 我知道我可以通过定义 __toString()
函数让我的类返回一个字符串。 但是,如果我尝试返回其他类型的值,则会引发异常。
有没有办法让对象返回非字符串? 我对纯PHP解决方案感兴趣,而不是像SplEnum那样需要编译扩展的解决方案。 (如果 SplEnum 返回非字符串并且编译的扩展是实现这一目标的唯一方法,我也希望得到确认。
没有办法做你想做的事情。返回字符串后,您可以将其转换为您喜欢的任何内容,但 __toString() 必须返回一个实际的字符串(并且没有 __toInt()),每个:
PHP魔术方法
此方法必须返回一个字符串,否则会发出致命的E_RECOVERABLE_ERROR级错误。
从更哲学的角度来看,将对象转换为 int 可能不是一个很好的架构模式。如果您正在考虑这样做,您可能需要重新考虑您的设计。
__toString
的问题在于它并不明显地表明格式是什么。
您可能希望通过多种方式打印 Month 对象:"Jan"
、"January"
、"01"
、"1"
、"janvier"
。 __toString
绝对是错误的功能。
在调试时使用__toString
有一些优点,但即便如此,它也值得怀疑。
我的建议是,为想要支持的每种输出格式创建一个函数,例如:
Month->getMonth(); // returns int(1)
Month->getFormattedMonth("long"); // returns "January"