【问题标题】:can we alias(save to a variable) a class method in php我们可以别名(保存到变量)php中的类方法吗
【发布时间】:2012-05-31 21:41:09
【问题描述】:

这是一个示例类:

public class example
 {
     private $foof;         

     public function __construct()
     {
          $this->foof = $this->foo;
     }

     public function foo($val=0)
     {
             // do something...
     }
 }

所以基本上,在示例代码的构造函数中,是否可以将类方法分配给变量?

最终我想要的是有一个关联数组,其中所有的类方法都带有别名......这在 php 中可能吗?

【问题讨论】:

    标签: php class function methods alias


    【解决方案1】:

    在 PHP5.3+ 中(无论如何你都应该使用它!)你可以简单地创建一个匿名函数来调用你的方法:

    $this->foof = function() {
        $this->foo(1);
    };
    

    但是,您不能使用 $this->foof() 调用它 - 您必须先将其分配给一个变量:$foof = $this->foof; $foof();


    在较旧的 PHP 版本中,您不能轻易做到这一点 - create_function() 不会创建闭包,因此 $this 在那里不可用。

    【讨论】:

    • 我们可以将参数分配给变量而不是匿名函数后传递给类方法吗?
    • 是的,只需给匿名函数一个参数并使用该参数而不是固定值。
    【解决方案2】:

    您不需要使用匿名函数。只需使用Callable pseudo type

    $this->foof = array($this, 'foo');
    ...
    call_user_func($this->foof);
    

    【讨论】:

    • 不是问题的重点。关键是能够将类方法别名为变量...所以每次我调用该变量时,它实际上都是对该类方法的引用...
    • 答案是正确的。也许这不是您想要的,或者不是您理想的答案,但这绝对是您要求的(含糊不清)。如果将其保存到 $f 然后通过 $f(55); 调用,它的工作原理是一样的
    • 你编辑它之后是有意义的。在编辑之前,它没有回答问题。
    • 我从未编辑过我的答案。您要求将方法别名为变量。我的回答确实如此,我什至向您展示了一种调用该函数的方法。你从来没有说过你必须通过一些特定的语法来调用它。
    • 如何向 call_user_func 添加参数?
    猜你喜欢
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2020-10-18
    • 2019-08-21
    • 2021-12-25
    • 2021-12-19
    相关资源
    最近更新 更多