PHP强制实例Closure,排序

Dan*_*ugg 4 php closures types anonymous-function

引用PHP:

目前使用Closure类实现匿名函数.这是一个实现细节,不应该依赖.

现在,那说,以下检查被认为是不可靠的:

function myFunction(Closure $callback){}

if(!($callback instanceof Closure)){}
Run Code Online (Sandbox Code Playgroud)

这让我们使用is_callable().这很好,但如果一个人需要一个真正的" 封闭 ",(作为一个论点,或者说是什么),那么is_callable()就不够严格了.以下当然转储bool(true)每个:

function myFunction(){}

class MyClass{
    public function __invoke(){}
}

var_dump(is_callable('myFunction'));
var_dump(is_callable(new MyClass));
Run Code Online (Sandbox Code Playgroud)

怎么样,而不依赖于Closure类(给出的实际上是不可靠的)可以在一个严格确定一个" 封闭 "?


更新

在我看来,我正朝着糟糕的设计方向前进.然而,尽管这个问题得到了回答,但我认为如果有人能够提出所提问题的答案,如果不是纯粹为了它的学术要素,我将不胜感激.

更新(再次)

自PHP 5.4发布以来(前一段时间),该Closure类型不再是"实现细节",可以依赖.function f(Closure $g) { }一切都很好.

Rad*_*ler 6

似乎PHP开发人员改变了他们关于Closure类作为实现细节的想法:

在PHP 5.3中实现的匿名函数产生这种类型的对象.这个事实过去被认为是一个实现细节,但现在可以依赖它.

http://php.net/manual/en/class.closure.php

因此,您现在应该考虑您的检查是否可靠:

function myFunction(Closure $callback){}

if(!($callback instanceof Closure)){}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢!:)很好找@Radu (2认同)