php class 是否存在,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值