我可以将命名空间 class 与 stream_wrapper_register 一起使用吗?
Can I use a namespaced class with stream_wrapper_register?
我有一个 class VarStream,我想像
一样注册
stream_wrapper_register('var', 'VarStream');
我们的 classes 总是命名空间,所以我试过了
stream_wrapper_register('var', '\OurSpace\VarStream');
运气不好。
我可以在注册流包装器时使用命名空间吗?
是的,你可以。您需要提供流包装器 class.
的 FQCN (Fully-Qualified-Class-Name)
您可能认为在您提供的代码中已经有了:
stream_wrapper_register('var', '\OurSpace\VarStream');
但事实并非如此,因为 FQCN 从不以反斜杠“\
”开头。
而是使用(仅)class-class 的名称:
stream_wrapper_register('var', 'OurSpace\VarStream');
通常不需要前导反斜杠。即使在这种情况下,它也会妨碍正确使用。它是 而不是 (完全限定的)class 名称的一部分。当您将 class-names 作为字符串参数传递时,通常总是这种情况。
我已经使用 ::class 解决了这个问题,
allows for fully qualified class name resolution at compile
例如,
stream_wrapper_register("stream", self::class)
因此您不必自己考虑(反)斜杠 ;]
我有一个 class VarStream,我想像
一样注册stream_wrapper_register('var', 'VarStream');
我们的 classes 总是命名空间,所以我试过了
stream_wrapper_register('var', '\OurSpace\VarStream');
运气不好。
我可以在注册流包装器时使用命名空间吗?
是的,你可以。您需要提供流包装器 class.
的 FQCN (Fully-Qualified-Class-Name)您可能认为在您提供的代码中已经有了:
stream_wrapper_register('var', '\OurSpace\VarStream');
但事实并非如此,因为 FQCN 从不以反斜杠“\
”开头。
而是使用(仅)class-class 的名称:
stream_wrapper_register('var', 'OurSpace\VarStream');
通常不需要前导反斜杠。即使在这种情况下,它也会妨碍正确使用。它是 而不是 (完全限定的)class 名称的一部分。当您将 class-names 作为字符串参数传递时,通常总是这种情况。
我已经使用 ::class 解决了这个问题,
allows for fully qualified class name resolution at compile
例如,
stream_wrapper_register("stream", self::class)
因此您不必自己考虑(反)斜杠 ;]