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

时间:2014-12-11 15:40:56

标签: php

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

echo new Month(Month::June) . PHP_EOL;

该代码的输出为" 6"。但是,我不知道该值是字符串还是数字。

这让我想知道,PHP对象可以返回除字符串以外的类型的值吗?我知道我可以通过定义__toString()函数使我的类返回一个字符串。但是,如果我尝试返回另一个类型的值,则抛出异常。

有没有办法让对象返回非字符串?我对纯PHP解决方案感兴趣,而不是需要编译扩展的解决方案,如SplEnum。 (如果SplEnum返回一个非字符串,并且编译后的扩展名是实现这一目标的唯一方法,我也非常感谢您的确认。)

2 个答案:

答案 0 :(得分:0)

没有办法做你想做的事。一旦返回一个String,你可以将它转换为你喜欢的任何东西,但__toString()必须返回一个实际的字符串(并且没有__toInt()),每个:

PHP Magic Methods

  

此方法必须返回一个字符串,否则会发出致命的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"