【问题标题】:PHP class called as a function作为函数调用的 PHP 类
【发布时间】:2011-09-07 07:40:36
【问题描述】:

有没有办法编写一个可以像函数一样调用的类?我的意思是这样的:

class test{}
$test = new test;
$test();

我尝试使用__call 魔术方法,但它只能在访问其上不存在的方法时使用。也许可以使用 SPL 类或接口来完成?

【问题讨论】:

  • 你想生产什么?
  • $someclass() 不是描述性的。它绝不会向您的代码的读者描述您打算做什么。函数名称应该是描述性的,它们应该向您展示(同样,不知道您意图的代码读者,很可能在几个月后成为您)。所以:想想你想做什么,并为它创建一个函数。 $test->GetFoo()$test->CreateBar() 显示您在函数中所做的事情,无需查看。
  • @CodeCaster 你是对的,但是例如为函数的最重要方法添加快捷方式会很有用
  • 很抱歉,但对我来说,这仍然不能作为有效的借口。目前尚不清楚$test 会发生什么,它需要处于什么状态,是否返回某些内容以及返回什么,您是否可以预期它会出错,等等。
  • 我不同意你的看法。如果你有一个有效的文件,你可以做任何事情。如果记录代码并且我写了一个教程说可以将测试类作为函数调用来执行特定任务,我看不出有任何问题。

标签: php class function


【解决方案1】:

使用__invoke magic method

class test{
    public function __invoke()
    {
        return 'fooo';
    }
}

$test = new test;
print $test();

但是你需要 PHP 5.3 来做这个。

根据您的尝试,另一种选择可能是使用closure

【讨论】:

  • 太好了,这就是我想要的。谢谢。
猜你喜欢
  • 2015-05-11
  • 2013-06-19
  • 2012-09-26
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
相关资源
最近更新 更多