gpt4 book ai didi

php - 如何检查 namespace 中是否存在类?

转载 作者:IT老高 更新时间:2023-10-28 12:03:52 24 4
gpt4 key购买 nike

我有这个:

    use XXX\Driver\Driver;

...

var_dump(class_exists('Driver')); // false
$driver = new Driver(); // prints 123123123 since I put an echo in the constructor of this class
exit;

嗯...这种行为是非常不合理的(创建根据 PHP 不存在的类的对象)。有没有办法检查给定命名空间下是否存在一个类?

最佳答案

为了检查类,您必须使用命名空间、完整路径来指定它:

namespace Foo;
class Bar
{
}

var_dump(class_exists('Bar'), class_exists('\Foo\Bar')); //false, true

-即您必须指定类的完整路径。您在命名空间中定义它,而不是在全局上下文中。

但是,如果您确实像在示例中那样在命名空间中导入类,则可以通过导入的名称而不使用命名空间来引用它,但这不允许您在动态构造中执行此操作,特别是在 -形成类名的行字符串。例如,以下所有操作都会失败:

namespace Foo;
class Bar {
public static function baz() {}
}

use Foo\Bar;

var_dump(class_exists('Bar')); //false
var_dump(method_exists('Bar', 'baz')); //false

$ref = "Bar";
$obj = new $ref(); //fatal

等等。问题在于为导入的别名工作的机制。因此,在使用此类结构时,您必须指定完整路径:

var_dump(class_exists('\Foo\Bar')); //true
var_dump(method_exists('\Foo\Bar', 'baz')); //true

$ref = 'Foo\Bar';
$obj = new $ref(); //ok

关于php - 如何检查 namespace 中是否存在类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22407370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com