【问题标题】:In PHP is there a way to alias function/method calls?在 PHP 中有没有办法给函数/方法调用起别名?
【发布时间】:2018-01-18 08:50:16
【问题描述】:

我不是在谈论为实际的函数/方法名称本身设置别名,而是为它们的调用设置别名:

$test->some_method($a,$b);

我们可以将上面的别名命名为:

$t_sm($a,$b);

再一次,我不是在谈论为实际函数/方法名称起别名,而是在它们的实际调用中减去参数。

编辑

不,我不想创建包装函数。并严格查看此处的可读性目的。这样可读性更高。

编辑

当给实际方法调用起别名时,它包括对象的名称,包括它正在调用的方法。就好像我只是给方法起别名一样,我仍然必须明确地调用它上面的对象。

编辑 是否有方法调用别名这样:

class Foo
{   
    function Bar($msg)
    {
        echo $msg;
    }
}

$f_b = 'Foo::Bar';
$msg = "calling method Bar via method-call-aliasing.";
$f_b($msg);

它创建 Foo 的实例,并为该实例以及指定的方法设置别名(字符串 'Foo::Bar' 的'Bar' 部分)。

【问题讨论】:

    标签: php function methods alias


    【解决方案1】:

    您需要创建一个callable 伪类型,它对于对象方法是一个数组,例如:

    $t_sm = [$test, 'some_method'];
    

    然后可以这样调用:

    $t_sm($a, $b);
    

    更多文档:http://php.net/manual/en/functions.variable-functions.php

    【讨论】:

    • 非常好,tyvm。
    • 其实可以发一下callable伪类型的实现吗?
    • 什么意思?我已经链接到文档,这是我所能提供的。
    • 他们所有的解决方案都显示使用'call_user_func'函数......我不想使用那个函数,而只是 $t_sm($a,$b) 自己......
    • 是的,call_user_func 在这里并不是必需的。任何callable 都可以使用$c() 语法调用。如果我记得正确的话,这主要是出于对匿名函数的支持,例如$c = function () {}。至少从那时起所有callables 都可以直接调用,因为并不总是可以知道callable 是如何创建的,因此区分如何调用它们是没有意义的。
    【解决方案2】:

    嗨,兄弟,我想您正在寻找这个。之前有人质疑过:

    <?php
     namespace Name\Space {
        const FOO = 42;
       function f() { echo __FUNCTION__."\n"; }
    }
    
    namespace {
        use const Name\Space\FOO;
         use function Name\Space\f;
    
        echo FOO."\n";
        f();
    }
    ?>
    

    输出: 42

    名称\空格\f

    参考:http://docs.php.net/manual/en/migration56.new-features.php#migration56.new-features.use

    Can we alias a function in php?

    【讨论】:

    • 谢谢。但这仍然建议“包装”功能/命名空间等。
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2022-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2012-11-30
    相关资源
    最近更新 更多