有没有办法获得函数的完全限定名,与接口和类的::class
类似?
我正在做一些功能风格的编程,并且需要能够传递callables。我想使用'适当的'功能,但我不想在各地的字符串中硬编码命名空间。据我所知,唯一的选择是使用带静态方法的实用程序类。
例如,假设您有一个函数bind
来绑定函数的某些参数。如果我使用正确的功能,我必须这样做:
<?php
// File1.php
namespace some\quite\long\nspace;
function add($a, $b) { return $a + $b; }
// File2.php
$f = bind('some\\quite\\long\\nspace\\add', 1);
使用静态方法,它变为:
<?php
// File1.php
namespace some\quite\long;
final class nspace {
public static function add($a, $b) { return $a + $b; }
}
// File2.php
use some\quite\long\nspace as n;
$f = bind([n::class, 'add'], 1);
这不仅更短,而且对于重构也更好(虽然不完美,因为它仍然有一个字符串方法名称)。
在一个理想的世界里,我想做这样的事情:
<?php
// File1.php
namespace some\quite\long\nspace;
function add($a, $b) { return $a + $b; }
// File2.php
use function some\quite\long\nspace\add;
$f = bind(add::name, 1);
这样的事情可能吗?如果没有,我认为这足以说服我在最后的课程中使用静态方法而不是“正确的”#39;功能