如何检查 PHP 中的对象是否实现了 ->__toString() ?
无论如何,有没有办法查看一个对象是否专门实现了 ->__toString?这似乎不起作用:
method_exists($object, '__toString');
Is there anyway to see if an object specifically implements ->__toString? This doesn't seem to work:
method_exists($object, '__toString');
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
有两种方法可以检查它。
假设您有类:
那么您可以执行以下任一操作:
或使用:
区别在于,在第一种情况下,该类未实际实例化。
您可以在此处查看演示:http://codepad.viper-7.com/B0EjOK
There are two way to check it.
Lets assume you have classes:
Then you can do either:
or use:
Difference is that in first case the class is not actually instantiated.
You can look at demo here : http://codepad.viper-7.com/B0EjOK
反射很慢,我认为这是使用它们的最糟糕的解决方案。
object - 对象实例或类名 (http://php.net/manual /en/function.method-exists.php)
无需创建对象来检查方法是否存在。
或者
Reflections is slow, and I think it's the worst solution to use them.
object - An object instance or a class name (http://php.net/manual/en/function.method-exists.php)
There is no need to create an object to checking for existence of a method.
or
您一定在其他地方做错了什么,因为这是有效的:
You must be doing something wrong somewhere else, because this works:
您应该能够使用反射: http://www.php.net/manual /en/reflectionclass.hasmethod.php
You should be able to use reflection: http://www.php.net/manual/en/reflectionclass.hasmethod.php
在 PHP 8 中出现了一个新的接口 Stringable。
Stringable
接口可用于键入提示任何字符串或实现__toString()
的内容。此外,每当一个类实现__toString()
时,它都会自动在幕后实现接口,无需手动实现它参考:来源
In PHP 8 a new interface Stringable appears.
The
Stringable
interface can be used to type hint anything that is a string or implements__toString()
. Furthermore, whenever a class implements__toString()
, it automatically implements the interface behind the scenes and there's no need to manually implement itref:source