php class 是否存在,php – 如何检查类是否存在于命名空间中?

本文讨论了在PHP中如何正确引用命名空间内的类,强调了使用完全限定名(FQCN)的重要性。当尝试通过变量或动态字符串创建类实例时,必须使用FQCN,因为导入的别名不适用于动态构造。示例展示了不使用FQCN导致的错误情况,如`class_exists`和`method_exists`返回false,以及尝试实例化类时的致命错误。

为了检查类,你必须指定它与命名空间,完整路径:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值