为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
犯罪嫌疑人X 2022-10-09 17:22:55
我有 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 }...在我的特殊情况下,我知道参数将始终是一个或另一个。我不需要一个通用的解决方案。
查看完整描述

4 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

Thefoo::class是一个字符串,它与其他字符串没有什么不同。

class_exists功能可以帮助您:

    var_dump(class_exists(foo::class));


查看完整回答
反对 回复 2022-10-09
?
互换的青春

TA贡献1797条经验 获得超6个赞

以下是您的选择:


class Foo {

}


$foo = new Foo;


is_object($foo); // $foo is an object


is_string($foo); // No, $foo isn't a string


$foo instanceof Foo // $foo is an instance of Foo


is_string(Foo::class) // Foo::class is a string just like any other string


get_class($foo) // returns 'Foo'


class_exists('Foo') // returns true if class Foo can be found


查看完整回答
反对 回复 2022-10-09
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

该foo::class调用返回一个类名字符串。您可以实例化一个对象并为其提供一个变量,如下所示:


$p = foo::class;

$query = new QueryThing();

$obj = new $p($query);

你可以这样做看看你有什么类型的课程


get_class($p) // returns "foo"

$p instanceof foo // returns true

但是您无法知道您的对象是通过foo::class调用动态实例化的。


查看完整回答
反对 回复 2022-10-09
?
繁花如伊

TA贡献2012条经验 获得超12个赞

你可以为instanceof


if($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.

}


查看完整回答
反对 回复 2022-10-09
  • 4 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信