函数的等价于:: class

时间:2015-03-13 21:02:32

标签: php function

有没有办法获得函数的完全限定名,与接口和类的::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;功能

0 个答案:

没有答案