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