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


How to make a PHP object return a non-string?

在阅读 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"