PHP:我如何知道变量是否是“::class”?

我有 PHP 代码,它传递一个参数User::class,然后用new $p.


但我还需要能够向它传递一个查询实例......一个具体的实例,当然,它也是一个对象......它是一个类的成员。


因此,如何检测变量的值是否是使用::class命名法创建的?


一点点单线建议一个答案:


$ php -r 'class foo {}; print gettype(foo::class);'

string

这个假设正确吗?对象实例(例如查询)是类型object,而::class构造是string?我只是回答了我自己的问题吗?


为了澄清,我的代码想要这样做:


 if (gettype($q) == 'string') {

   $query = new $q();      // must be '::class' (TRUE in my situation tho' not generally)

 } else {                  // (so, the only other possibility in my case is 'object')

   $query = $q;            // existing object instance

 }

...在我的特殊情况下,我知道参数将始终是一个或另一个。我不需要一个通用的解决方案。


犯罪嫌疑人X
浏览 167回答 4
4回答

德玛西亚99

Thefoo::class是一个字符串,它与其他字符串没有什么不同。该class_exists功能可以帮助您:    var_dump(class_exists(foo::class));

互换的青春

以下是您的选择:class Foo {}$foo = new Foo;is_object($foo); // $foo is an objectis_string($foo); // No, $foo isn't a string$foo instanceof Foo // $foo is an instance of Foois_string(Foo::class) // Foo::class is a string just like any other stringget_class($foo) // returns 'Foo'class_exists('Foo') // returns true if class Foo can be found

一只斗牛犬

该foo::class调用返回一个类名字符串。您可以实例化一个对象并为其提供一个变量,如下所示:$p = foo::class;$query = new QueryThing();$obj = new $p($query);你可以这样做看看你有什么类型的课程get_class($p) // returns "foo"$p instanceof foo // returns true但是您无法知道您的对象是通过foo::class调用动态实例化的。

繁花如伊

你可以为instanceofif($q instanceof Foo){    echo "Here do the things you need with your class";} else {    echo "Assume it is a string?";}我建议的另一个选择是确保通过类型提示获得期望的数据。function bar(Foo $foo){    //foo has to be Foo class or exception will be thrown.}
打开App,查看更多内容
随时随地看视频慕课网APP