如何检查对象是否在 PHP 中实现了 ->__toString()?

2022-08-30 19:15:13

有没有一个对象专门实现->__toString?这似乎不起作用:

method_exists($object, '__toString');

答案 1

有两种方法可以检查它。

假设您有类:

class Foo
{
    public function __toString()
    {
        return 'foobar';
    }
}

class Bar
{
}

然后,您可以执行以下任一操作:

$rc = new ReflectionClass('Foo');       
var_dump($rc->hasMethod('__toString'));

$rc = new ReflectionClass('Bar');       
var_dump($rc->hasMethod('__toString'));

或使用:

$fo = new Foo;
var_dump( method_exists($fo , '__toString'));
$ba = new Bar;
var_dump( method_exists($ba , '__toString'));

不同之处在于,在第一种情况下,类实际上并没有实例化。
你可以在这里看演示:http://codepad.viper-7.com/B0EjOK


答案 2

反射很慢,我认为这是使用它们的最糟糕的解决方案。

bool method_exists ( mixed $object , string $method_name )

对象 - 对象实例或类名(http://php.net/manual/en/function.method-exists.php)

无需创建对象来检查方法是否存在。

method_exists('foo', '__toString')

interface StringInterface{
   public function __toString() :string;
}


class Foo implement StringInterface {...}

->>(new MyClass) instanceof StringInterface

推荐