PHP:: 字符串的完全限定方法文字
PHP:: Fully-qualified method literal to string
本质上,我试图将静态 class 方法传递给回调,但不希望使用硬编码字符串,而是完全限定的 class 方法文字.我们可以像这样使用 classes 来做到这一点:
$name = NS\FooClass::class;
而不是:
$name = 'NS\FooClass';
这将为我们提供 class 的完全限定名称的字符串。我寻求能够为 class 方法做类似的事情,如下所示:
$name = NS\FooClass::foo_method::method;
而不是:
$name = 'NS\FooClass::foo_method';
它更易于管理,我可以使用文字更好地使用 IDE 功能。有什么类似的方法可以在不使用字符串的情况下使用 class 方法实现我想要的效果?
目前语言中没有内置这样的机制。有人建议 - 例如参见 [=20=] - 但要考虑的细微差别比立即显而易见的要多;特别是:
- 语法是否应该在 运行 时解析并检查 class 和方法(
::class
在大多数情况下不存在;像 [= 这样的裸函数12=] 由于名称空间的解析方式而必须这样做;实现 __callStatic
的对象永远不能以这种方式使用)?
- 结果应该是字符串、数组(见下文)还是
Closure
对象?
无论如何,这是其他地方的话题...
正如the manual page on the callable
type所说,有两种方法可以指定静态方法作为回调:
- 作为字符串,如您的示例
'NS\FooClass::foo_method'
- 作为数组,其中第一部分是 class 名称,第二部分是方法名称:
['NS\FooClass', 'foo_method']
因为只有 class 名称需要使用命名空间信息进行限定,您可以使用 ::class
和第二种语法来获得几乎您想要的结果:
$callback = [NS\FooClass::class, 'foo_method'];
这允许任何体面的 IDE 发现对 class 的引用,并允许您通过 an imported or aliased name.
引用它
值得注意的是,如果 callable
类型在参数或 return 类型声明或文档块中指定,某些 IDEs(例如 PhpStorm)将“理解”格式作为对方法的引用,并将其包含在“查找用法”和“转到声明”等功能中。
本质上,我试图将静态 class 方法传递给回调,但不希望使用硬编码字符串,而是完全限定的 class 方法文字.我们可以像这样使用 classes 来做到这一点:
$name = NS\FooClass::class;
而不是:
$name = 'NS\FooClass';
这将为我们提供 class 的完全限定名称的字符串。我寻求能够为 class 方法做类似的事情,如下所示:
$name = NS\FooClass::foo_method::method;
而不是:
$name = 'NS\FooClass::foo_method';
它更易于管理,我可以使用文字更好地使用 IDE 功能。有什么类似的方法可以在不使用字符串的情况下使用 class 方法实现我想要的效果?
目前语言中没有内置这样的机制。有人建议 - 例如参见 [=20=] - 但要考虑的细微差别比立即显而易见的要多;特别是:
- 语法是否应该在 运行 时解析并检查 class 和方法(
::class
在大多数情况下不存在;像 [= 这样的裸函数12=] 由于名称空间的解析方式而必须这样做;实现__callStatic
的对象永远不能以这种方式使用)? - 结果应该是字符串、数组(见下文)还是
Closure
对象?
无论如何,这是其他地方的话题...
正如the manual page on the callable
type所说,有两种方法可以指定静态方法作为回调:
- 作为字符串,如您的示例
'NS\FooClass::foo_method'
- 作为数组,其中第一部分是 class 名称,第二部分是方法名称:
['NS\FooClass', 'foo_method']
因为只有 class 名称需要使用命名空间信息进行限定,您可以使用 ::class
和第二种语法来获得几乎您想要的结果:
$callback = [NS\FooClass::class, 'foo_method'];
这允许任何体面的 IDE 发现对 class 的引用,并允许您通过 an imported or aliased name.
引用它值得注意的是,如果 callable
类型在参数或 return 类型声明或文档块中指定,某些 IDEs(例如 PhpStorm)将“理解”格式作为对方法的引用,并将其包含在“查找用法”和“转到声明”等功能中。